gpt4 book ai didi

qt - qMake:qmake到底如何解释 "CONFIG(debug, debug|release)"语法

转载 作者:行者123 更新时间:2023-12-03 07:18:34 26 4
gpt4 key购买 nike

我读过HERE ,但我仍然不明白 qmake CONFIG 变量的语法。例如,如果我的 .pro 文件中有以下 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

知道我正在“ Debug模式”下构建我的项目,那么我的问题是:

  • 为什么不只显示“ Debug模式”消息?为什么不只显示一次呢?
  • 那么,既然我是在“ Debug模式”下构建,为什么会显示“Project MESSAGE: Release模式”消息
  • 确切地说,语法:CONFIG(debug, debug|release) 的真正含义是什么?这是否意味着在 Debug模式下构建,然后再次在 Debug模式下构建,最后在发行版中构建模式 ?我知道这些括号“{}”表示 scope (旧链接已失效,推荐 scope )但是 qmake 如何解释这些括号“()”内的内容?

最佳答案

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

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

最后,如果 CONFIG 包含“debug”但不包含“release”,或者同时包含“debug”和“release”但包含“release”,则 CONFIG(debug, debug|release) 计算结果为 true “在最后一次出现“debug”后不会出现。例如,您可能有这样的:

CONFIG += release debug release debug release debug

由于最后一次“调试”是在最后一次“发布”之后发生的,因此 CONFIG(debug, debug|release) 为 true。

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

将其翻译成英语会得到这样的结果:如果“debug”至少出现一次,则评估为 true,并且如果“release”也出现,则“debug”的最后一次出现在“release”的最后一次出现之后.

关于qt - qMake:qmake到底如何解释 "CONFIG(debug, debug|release)"语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com