QT中的QMAKE_CXXFLAGS_DEBUG/QMAKE_CXXFLAGS_Release的选项

发布时间 2023-10-13 21:40:19作者: 不会笑的孩子

QMAKE_CXXFLAGS_Debug

-g:启用调试信息,以便在 Debug 模式下进行调试。

-DDEBUG:定义宏 DEBUG,用于启用调试特定代码段。

-O0:禁用优化,以便在 Debug 模式下更容易调试。

-fsanitize=address:启用地址检测器,用于检测内存错误。

-fsanitize=undefined:启用未定义行为检测器,用于检测潜在的编程错误。

-fno-omit-frame-pointer:不省略帧指针,以便更好地支持调试器。

QMAKE_CXXFLAGS_Release

-O2:启用编译器的优化级别 2,用于提高 Release 模式下的代码执行性能。

-DNDEBUG:定义宏 NDEBUG,用于禁用断言,从而减小可执行文件的大小并提高性能。

-march=xxx:指定目标 CPU 架构,以进行特定的处理器优化。

-mtune=xxx:指定用于优化的目标 CPU 微架构。

-fomit-frame-pointer:优化选项,省略生成的代码中的帧指针。

-finline-functions:启用内联函数优化,将短小函数内联到调用它们的地方。

-flto:启用链接时优化,用于全局代码优化。

-s:剔除符号表,减小可执行文件的大小。

/MD和/MT有什么区别

/MD 和 /MT 是 Microsoft Visual C++ 编译器的选项,用于指定运行时库的链接方式。它们之间的区别在于如何处理 C/C++ 运行时库。

  • /MD:这个选项表示使用多线程动态链接库(Multithreaded-DLL)运行时库。使用这个选项会将应用程序链接到动态链接库(DLL)版本的 C/C++ 运行时库,这意味着你的应用程序将依赖于系统上已安装的相应运行时库 DLL 文件。这可以减小生成的可执行文件的大小,但需要确保用户的系统上有正确版本的运行时库。
  • /MT:这个选项表示使用多线程静态链接库(Multithreaded)运行时库。使用这个选项会将应用程序链接到静态版本的 C/C++ 运行时库,这样运行时库的代码会被嵌入到你的应用程序中,而不再依赖于外部的 DLL 文件。这可以减小应用程序的外部依赖,但可能会增加应用程序的大小。