在您链接到的文章中,一开始就说项目文件被处理了三遍。这应该回答您的第一个问题;因为它被处理了三次,所以你的 message() 也被执行了三次。为什么要多次处理?因为 qmake 不会构建你的项目!它只生成构建指令,然后用于实际构建项目。为了为所有可能的配置生成构建指令,它需要多次处理项目文件,每个配置一次。
对于您的第二个问题:您的项目仅在您选择的调试模式下构建,但是如上所述,构建指令也是为发布模式创建的。例如,当将“make”与 mingw(而不是 Visual Studio)一起使用时,您会得到两个 Makefile:Makefile.Release
和Makefile.Debug
. 当它生成发布 makefile 时,就是打印“发布模式”的时候。
最后,CONFIG(debug, debug|release)
如果 CONFIG 包含“debug”但不包含“release”,或者它同时包含“debug”和“release”但在最后一次出现“debug”之后没有出现“release”,则计算结果为 true。例如你可能有这个:
CONFIG += release debug release debug release debug
由于最后一个“调试”是在最后一个“发布”之后出现的,CONFIG(debug, debug|release)
所以是真的。
CONFIG() 的第一个参数(在本例中为“debug”)是最后出现的值。第二个参数(“debug|release”)是检查第一个参数的一组值。
将其翻译成英语会给出这样的结果:如果“debug”至少出现一次,则评估为真,如果“release”也出现,“debug”的最后一次出现在“release”的最后一次出现之后。