Qt Creator:发行版和调试版之间的技术差异

时间:2018-12-04 13:55:21

标签: gdb qt-creator qmake

关于使用QtCreator构建过程的一系列问题:

在QtCreator中,您可以在Release,Debug和Profiler构建之间进行区别。 f。下图: The QtCreator window part I refer to

  1. 这些东西到底是做什么的(!)?我无法在互联网上找到答案。 尤其是,我对“调试”模式是否将项目“ debug”添加到qmake变量“ CONFIG”,“-g”开关以要求g ++为gdb(我的调试器)添加调试信息等感兴趣。

    < / li>
  2. 哪个调试器的意思是“ CONFIG + = debug”:“常规”调试器GDB(以我为例)还是QML调试器?

  3. 为什么在项目文件中使用“ + =”而不是“ * =”如此常见?如果第二个变量已经存在,则不会将其添加到qmake变量中。这是否意味着qmake特殊变量中的多个相等项是无害的?

非常感谢!

1 个答案:

答案 0 :(得分:1)

  1. 您可以通过观察在“编译器输出”窗口窗格中调用的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
    
  2. 编译调试版本仅意味着编译后的库和可执行文件将未经优化,并且包含对调试器有用的额外信息。不需要在特定的调试器中执行,甚至根本不需要在任何调试器中执行。您也可以在调试器中运行发行版,尽管结果可能不太可靠。

  3. qmake特殊变量中的多个相等项通常是无害的,对于CONFIG来说,它们甚至可能是有意义的。例如,CONFIG包含两者 debugrelease都是合法的。在这种情况下,列表中的最后一个将生效。在以下示例中考虑+=*=之间的区别:

    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 /通配符,除非对其进行转义或引用。