cmake_cxx_flags 常用值
在 CMake 中,CMAKE_CXX_FLAGS 是一个用于指定 C++ 编译器选项的变量。你可以将不同的编译选项添加到这个变量中,以影响编译过程的行为。以下是一些常用的 CMAKE_CXX_FLAGS 值及其说明:
1. 优化选项
- 1.-O0:禁用优化(默认选项)。
- 2.-O1:启用一级优化。
- 3.-O2:启用二级优化(推荐用于生产)。
- 4.-O3:启用三级优化,适用于对性能要求极高的程序。
- 5.-Os:优化生成的代码大小。
- 6.-Ofast:启用所有的优化,并可能不符合标准(如允许不精确的浮点运算)。
2. 警告和错误
- 7.-Wall:启用所有常见的警告。
- 8.-Wextra:启用额外的警告。
- 9.-Werror:将所有警告视为错误。
- 10.-Wpedantic:启用严格的标准遵循警告。
3. 调试选项
- 11.-g:生成调试信息,通常在调试版本中使用。
- 12.-g3:生成详细的调试信息。
4. 语言标准
- 13.-std=c++11:启用 C++11 标准。
- 14.-std=c++14:启用 C++14 标准。
- 15.-std=c++17:启用 C++17 标准。
- 16.-std=c++20:启用 C++20 标准。
- 17.-std=gnu++11:启用 GNU 扩展的 C++11 标准。
5. 特定于平台的选项
- 18.-m32:生成 32 位程序(在支持的系统上)。
- 19.-m64:生成 64 位程序(在支持的系统上)。
- 20.-fPIC:生成位置无关的代码,通常用于共享库。
6. 其他选项
- 21.-fopenmp:启用 OpenMP 支持(并行编程)。
- 22.-fsanitize=address:启用地址消毒(检测内存错误)。
- 23.-fsanitize=undefined:启用未定义行为消毒。
示例
如果你想在 CMakeLists.txt 中设置这些选项,可以这样做:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall -Wextra -g -std=c++17")
7. 设置构建类型
你还可以通过设置 CMAKE_BUILD_TYPE 来指定常用的构建选项:
set(CMAKE_BUILD_TYPE Release) # 对于优化
# or
set(CMAKE_BUILD_TYPE Debug) # 对于调试
8. 特定构建类型的标志
CMake 还提供了一些预定义的构建类型标志,可以在不同的构建类型中使用:
set(CMAKE_CXX_FLAGS_RELEASE "-O2") # Release 构建
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") # Debug 构建
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os") # MinSizeRel 构建
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") # RelWithDebInfo 构建
总结
在 CMakeLists.txt 中,使用 CMAKE_CXX_FLAGS 可以根据项目需求灵活配置编译器选项,以优化编译过程并满足特定的开发需求。通过设置适当的标志,你可以控制编译过程中的优化级别、警告级别、调试信息等。