如果存在任何其他差异,可以解释除调试构建中嵌入的调试符号之外的其他人。此外,我非常好奇,知道他们在执行二进制文件方面有何不同。正在使用的机制使用调试版本中的调试符号来显示错误。
答案 0 :(得分:3)
在qt中编译为调试,编译器调用中的-DQT_NO_DEBUG标志用于许多qt库中。-QQT_NO_DEBUG标志。 正如吉米已经指出的那样,主要的性能差异来自于这个来源。 一个极端的例子可能是使用可用于检查边界的STL容器的调试版本。如果在调试模式下代码中使用了这些内容,则可能需要更长时间(Qt不使用此代码,但会对其库引入类似的检查)。
通常还会更改优化标志。 对于发布 - 选择发布-O2而不是优化调试
关于调试版本的一个更重要的事情是,您可以使用它来触发专业文件中的不同内容,例如添加定义,更改目标或针对另一组库进行编译:
CONFIG(debug, debug|release) {
message("Debug")
DESTDIR = $$DESTDIR-debug
CONFIG += debug
DEFINES += DEBUG
TARGET = $$TARGET-debug
}else{
message("Release")
DEFINES += QT_NO_DEBUG_OUTPUT
DESTDIR = $$DESTDIR-release
TARGET = $$TARGET-release
}
如果您对更多细节感兴趣,请查看qmake配置文件。 Linux Ubuntu:/usr/share/qt4/mkspecs/common/g++.conf /usr/share/qt4/mkspecs/common/linux.conf和目标相关配置文件
答案 1 :(得分:1)
“发布版本”与“调试版本”的确切定义和行为取决于构建系统和您使用的编译器。与调试版本相比,版本构建的一些常见属性: