qMake:qmake究竟解释了"CONFIG(debug,debug | release)"语法

has*_*ine 40 qt qmake qt-creator

我在这里阅读,但我仍然不理解qmake CONFIG变量的语法.例如,如果我在我的下面有CONFIG设置.pro file:

CONFIG(debug, debug|release) {
    message("debug mode")
}else {
    message("release mode")
}
Run Code Online (Sandbox Code Playgroud)

然后,在运行时qmake,以下内容将显示在Qt-Creator的编译输出中:

Project MESSAGE: debug mode
Project MESSAGE: debug mode
Project MESSAGE: release mode
Run Code Online (Sandbox Code Playgroud)

知道我正在以"调试模式"构建我的项目,那么我的问题是:

  • 为什么不显示"调试模式"消息?为什么不只展示一次呢?
  • 然后,由于我在"调试模式"下构建,为什么会显示消息"Project MESSAGE:release mode"
  • 究竟是什么语法:CONFIG(debug,debug | release)真的意味着什么?这是否意味着在调试模式下构建,然后再次构建在调试模式,最后构建在发布模式?我知道这些括号"{}"表示范围,但qmake如何解释这些括号中的内容"()"?

Nik*_* C. 58

在您链接的文章中,一开始就说项目文件被处理了三次.这应该回答你的第一个问题; 因为它被处理了三次,你的message()也被执行了三次.为什么要多次处理?因为qmake不能构建你的项目!它只生成构建指令,然后用于实际构建项目.为了生成所有可能配置的构建指令,它需要多次处理项目文件,每次配置一次.

对于第二个问题:如果这是您选择的项目,那么您的项目仅在调试模式下构建,但是也为发布模式创建了构建指令,如上所述.例如,当使用mingw"make"(而不是Visual Studio)时,你会得到两个Makefile:Makefile.ReleaseMakefile.Debug.当它生成释放makefile时,就是在打印"释放模式"时.

最后,CONFIG(debug, debug|release)如果CONFIG包含"debug"但不包含"release",或者如果它包含"debug"和"release",但在"debug"的最后一次出现后没有出现"release",则求值为true.例如,你可能有这个:

CONFIG += release debug release debug release debug
Run Code Online (Sandbox Code Playgroud)

由于最后一次"调试"发生在最后一次"发布"之后,CONFIG(debug, debug|release)是真的.

CONFIG()的第一个参数(在本例中为"debug")是最后必须出现的值.第二个参数("debug | release")是检查第一个参数的值的集合.

将其翻译成英语将给出如下内容:如果"debug"至少出现一次,则评估为true,如果"release"也出现,则"debug"的最后一次出现在"release"的最后一次出现之后出现.

  • 非常感谢您的回答,这非常重要且有帮助.但是,我不理解"声明评估"的部分内容.你提到"`CONFIG(debug,debug | release)`如果CONFIG包含调试等,则求值为true",你是什么意思"包含"?你的意思是在`CONFIG + = debug`中定义?如果是这样,假设我的`.pro文件中没有这样的定义,那么这个定义的位置是什么?..另外,你还定义了这个:`CONFIG + = release debug release debug release debug`,这样定义"debug"和"release"是什么意思? (3认同)