首页 文章

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

提问于
浏览
33

我读了HERE,但我仍然不理解 qmake CONFIG 变量的语法 . 例如,如果我的 .pro file 中有以下CONFIG设置:

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

知道我正在_1254708中构建我的项目,那么我的问题是:

  • why not showing the "debug mode" message only ?为什么不只展示一次呢?

  • 然后,因为我正在建造"debug mode", why the message "Project MESSAGE: release mode" is displayed

  • 确切地说, what the syntax: CONFIG(debug, debug|release) really means? 是否意味着在调试模式下构建,然后再次构建在调试模式中并最终构建在发布模式中?我知道这些括号"{}"表示scope但qmake如何解释这些括号内的内容"()"?

1 回答

  • 52

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

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

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

    CONFIG += release debug release debug release debug
    

    由于最后"debug"在最后"release"之后, CONFIG(debug, debug|release) 为真 .

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

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

相关问题