Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt qMake:qMake如何准确地解释;配置(调试,调试发布)";语法_Qt_Qt Creator_Qmake - Fatal编程技术网

Qt qMake:qMake如何准确地解释;配置(调试,调试发布)";语法

Qt qMake:qMake如何准确地解释;配置(调试,调试发布)";语法,qt,qt-creator,qmake,Qt,Qt Creator,Qmake,虽然我读了,但我仍然不理解qmake-CONFIG变量的语法。例如,如果我的.pro文件中有以下配置设置: CONFIG(debug, debug|release) { message("debug mode") }else { message("release mode") } 然后,当运行qmake时,Qt Creator中的编译输出中将显示以下内容: Project MESSAGE: debug mode Project MESSAGE: debug mode Proje

虽然我读了,但我仍然不理解
qmake-CONFIG
变量的语法。例如,如果我的
.pro文件中有以下配置设置

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
知道我正在以“调试模式”构建项目,我的问题是:

  • 为什么不只显示“调试模式”消息?为什么不只展示一次呢
  • 那么,既然我是在“调试模式”下构建的,为什么会显示消息“项目消息:发布模式”
  • 确切地说,语法:CONFIG(debug,debug | release)的真正含义是什么?是否意味着在调试模式下构建,然后再次在调试模式下构建,最后在发布模式下构建?我知道这些括号“{}”意味着一个(旧链接已经死了,推荐)但是qmake如何解释这些括号内的内容“()”

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

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

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

CONFIG += release debug release debug release debug
由于最后一次“调试”发生在最后一次“发布”之后,
CONFIG(debug,debug | release)
为真

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


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

非常感谢您的回答,这是非常重要和有用的。然而,我不理解“声明评估”部分。您提到“
CONFIG(debug,debug | release)
如果CONFIG包含debug等,则计算结果为true”,您所说的“contains”是什么意思?您的意思是定义为
CONFIG+=debug
?如果是,鉴于我的
.pro文件
中没有此类定义,那么此定义位于何处。。另一件事,你也定义了:
CONFIG+=release-debug-release-debug
,像这样定义“debug”和“release”意味着什么?请原谅我的问题太多了,因为我根本找不到任何解释它的互联网来源,更不用说你的解释非常简单,简洁明了。@hashDefine Qt创建者可以在调用qmake时将“release”添加到配置中。例如,如果在“Build”菜单中选择“runqmake”,并将构建设置为release模式,则可以看到它将“CONFIG+=release”作为参数传递给qmake。由于CONFIG已经可以包含“debug”(因为您自己已经将其放在项目文件中,或者它可能来自mkspec文件),所以必须有一种方法来覆盖它。这就是“在配置中最后出现”规则存在的原因。我举的例子就是这样;举个例子。添加“release”和“debug”来配置您自己是没有用的。我个人认为debug | release对应于debug |和_release@user1914692构建是调试或发布。不能两者兼而有之。