Qt Creator:Release 和 Debug 构建之间的技术差异
Qt Creator: technical differences between Release and Debug builds
一堆关于使用QtCreator构建过程的问题:
在 QtCreator 中,您可以区分 Release、Debug 和 Profiler 构建。 C.f.下图:
这些东西到底有什么作用(!)?我无法在互联网上找到和回答。
特别是,我感兴趣的是 Debug 模式是否将项目“debug”添加到 qmake 变量“CONFIG”,“-g”开关要求 g++ 为 gdb(我的调试器)添加调试信息等
“CONFIG += debug”指的是哪个调试器:“普通”调试器 GDB(在我的例子中)还是 QML 调试器?
为什么在项目文件中经常使用“+=”而不是“*=”?如果项目已经存在,第二个变体不会将项目添加到 qmake 变量。这是否意味着 qmake 特殊变量中的多个相等项是无害的?
非常感谢!
您可以通过观察在 "Compiler Output" window 窗格中调用的 qmake 命令行来了解它们的作用:
- 发布:
qmake MyProject.pro "CONFIG+=qtquickcompiler"
- 调试:
qmake MyProject.pro "CONFIG+=debug" "CONFIG+=qml_debug"
- 简介:
qmake MyProject.pro "CONFIG+=qml_debug" "CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"
gdb 没有 -g
选项,你是说 gcc 吗? CONFIG+=debug
的作用是将-g
选项传递给gcc,从Qt/mkspecs/common/gcc-base.conf
中的这一行可以看出:
QMAKE_CFLAGS_DEBUG += -g
编译调试版本仅意味着您编译的库和可执行文件将未经优化,并且包含对调试器有用的额外信息。不需要在特定的调试器中执行,或者根本不需要在任何调试器中执行。您也可以在调试器中 运行 发布版本,尽管您可能会发现结果不太可靠。
qmake特殊变量中的多个相等项通常是无害的,在CONFIG
的情况下它们甚至是有意义的。例如,CONFIG
包含 both debug
和 release
是合法的。在这种情况下,列表中的最后一个将生效。考虑以下示例中 +=
和 *=
之间的区别:
CONFIG = debug
CONFIG += release
CONFIG += debug # now CONFIG = debug release debug, so debug is the effective mode
CONFIG = debug
CONFIG += release
CONFIG *= debug # now CONFIG = debug release, so release is the effective mode
*=
在命令行中可能不受青睐的另一个原因是:许多 shell 会将任何包含 *
的参数视为要扩展的文件 glob/wildcard,除非它是转义或引用。
一堆关于使用QtCreator构建过程的问题:
在 QtCreator 中,您可以区分 Release、Debug 和 Profiler 构建。 C.f.下图:
这些东西到底有什么作用(!)?我无法在互联网上找到和回答。 特别是,我感兴趣的是 Debug 模式是否将项目“debug”添加到 qmake 变量“CONFIG”,“-g”开关要求 g++ 为 gdb(我的调试器)添加调试信息等
“CONFIG += debug”指的是哪个调试器:“普通”调试器 GDB(在我的例子中)还是 QML 调试器?
为什么在项目文件中经常使用“+=”而不是“*=”?如果项目已经存在,第二个变体不会将项目添加到 qmake 变量。这是否意味着 qmake 特殊变量中的多个相等项是无害的?
非常感谢!
您可以通过观察在 "Compiler Output" window 窗格中调用的 qmake 命令行来了解它们的作用:
- 发布:
qmake MyProject.pro "CONFIG+=qtquickcompiler"
- 调试:
qmake MyProject.pro "CONFIG+=debug" "CONFIG+=qml_debug"
- 简介:
qmake MyProject.pro "CONFIG+=qml_debug" "CONFIG+=qtquickcompiler" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info"
gdb 没有
-g
选项,你是说 gcc 吗?CONFIG+=debug
的作用是将-g
选项传递给gcc,从Qt/mkspecs/common/gcc-base.conf
中的这一行可以看出:QMAKE_CFLAGS_DEBUG += -g
- 发布:
编译调试版本仅意味着您编译的库和可执行文件将未经优化,并且包含对调试器有用的额外信息。不需要在特定的调试器中执行,或者根本不需要在任何调试器中执行。您也可以在调试器中 运行 发布版本,尽管您可能会发现结果不太可靠。
qmake特殊变量中的多个相等项通常是无害的,在
CONFIG
的情况下它们甚至是有意义的。例如,CONFIG
包含 bothdebug
和release
是合法的。在这种情况下,列表中的最后一个将生效。考虑以下示例中+=
和*=
之间的区别:CONFIG = debug CONFIG += release CONFIG += debug # now CONFIG = debug release debug, so debug is the effective mode CONFIG = debug CONFIG += release CONFIG *= debug # now CONFIG = debug release, so release is the effective mode
*=
在命令行中可能不受青睐的另一个原因是:许多 shell 会将任何包含*
的参数视为要扩展的文件 glob/wildcard,除非它是转义或引用。