【发布时间】:2017-12-08 14:03:57
【问题描述】:
我创建了一个空的 Qt 项目来说明我的问题。除了 pro 文件中的这个 QMake 代码之外,项目中没有任何内容。项目/构建配置只是默认值。
这个 Qmake 代码总是执行$$system() 函数,但它是在“幕后”执行的。有一个神秘的过程,其中contains( DEFINES, anything ) ALWAYS 评估为真并触发后续代码。请注意,您可以在我使用过something 和anything 的地方使用任何值。
CONFIG( something ){ DEFINES+=anything }
contains( DEFINES, anything ){
message( anything! )
stdOut=$$system( echo x > test.txt )
}
else{
message( nothing! )
}
每次运行时(我只是将文件保存在 QtCreator 中以启动它 - 不运行 QMake),会出现以下一般消息:
项目消息:没有!
一秒钟后,test.txt 文件出现在项目目录中。
更奇怪的是,如果您直接使用CONFIG() 作为控制文件写入的条件,则不会发生这种情况。此外,如果您删除该 CONFIG() 行,则不会发生这种情况。
似乎有一个神秘的后台进程对此进行评估,并始终执行DEFINES+=anything,然后继续处理存在的任何逻辑。
我知道,如果你有条件地将源文件添加到项目中,它们将始终出现在文件浏览树中,即使它们没有被编译。这是 Qt Creator 忽略条件并出于自己的目的执行 QMake 的示例。这是相同的机制吗?
【问题讨论】: