虽然我读过HERE,但我仍然不理解qmake CONFIG
变量的语法。例如,如果我在.pro file
中有以下配置设置:
CONFIG(debug, debug|release) {
message("debug mode")
}else {
message("release mode")
}
然后,当运行qmake
时,以下内容将显示在Qt-Creator的编译输出中:
Project MESSAGE: debug mode
Project MESSAGE: debug mode
Project MESSAGE: release mode
知道我正在以“调试模式”构建我的项目,那么我的问题是:
答案 0 :(得分:58)
在您链接的文章中,一开始就说项目文件处理了三次。这应该回答你的第一个问题;因为它被处理了三次,你的message()也被执行了三次。为什么要多次处理?因为qmake不能构建你的项目!它只生成构建指令,然后用于实际构建项目。为了生成所有可能配置的构建指令,它需要多次处理项目文件,每次配置一次。
对于您的第二个问题:如果您选择的是项目,那么您的项目仅在调试模式下构建,但是也会为发布模式创建构建指令,如上所述。例如,当使用mingw的“make”(而不是Visual Studio)时,您将获得两个Makefile:Makefile.Release
和Makefile.Debug
。当它生成释放makefile时,就是在打印“释放模式”时。
最后,CONFIG(debug, debug|release)
如果CONFIG包含“debug”但不包含“release”,或者如果它包含“debug”和“release”,但在最后一次出现之后没有出现“release”,则CONFIG += release debug release debug release debug
的计算结果为true “调试”。例如,你可能有这个:
CONFIG(debug, debug|release)
由于最后一次“调试”发生在最后一次“发布”之后,{{1}}为真。
CONFIG()的第一个参数(在本例中为“debug”)是最后必须出现的值。第二个参数(“debug | release”)是检查第一个参数的值的集合。
将其转换为英语会产生如下结果:如果“debug”至少出现一次,则评估为true,如果出现“release”,则“debug”的最后一次出现在“release”的最后一次出现之后出现