QT中的QMAKE_CXXFLAGS_DEBUG/QMAKE_CXXFLAGS_Release的选项
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 文件。这可以减小应用程序的外部依赖,但可能会增加应用程序的大小。