在 CMake 中,有许多有用的变量可以控制构建过程、编译器选项、安装路径等。以下是一些常见的、实用的 CMake 变量分类介绍,并附上典型用法:
1. 基础构建控制变量
CMAKE_BUILD_TYPE
- 作用:指定构建类型(Debug/Release/RelWithDebInfo/MinSizeRel)。
- 示例:
set(CMAKE_BUILD_TYPE Release) # 设置为 Release 模式(优化)
CMAKE_CXX_STANDARD
- 作用:指定 C++ 标准版本(如 11/14/17/20)。
- 示例:
set(CMAKE_CXX_STANDARD 17) # 使用 C++17
CMAKE_CXX_FLAGS
- 作用:全局 C++ 编译选项(如警告、优化)。
- 示例:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") # 启用所有警告
2. 编译器与工具链相关
CMAKE_C_COMPILER
/ CMAKE_CXX_COMPILER
- 作用:强制指定 C/C++ 编译器路径。
- 示例:
set(CMAKE_CXX_COMPILER "/usr/bin/clang++") # 使用 Clang 代替 GCC
CMAKE_TOOLCHAIN_FILE
- 作用:指定工具链文件(用于交叉编译)。
- 示例:
cmake -DCMAKE_TOOLCHAIN_FILE=arm-toolchain.cmake ..
3. 安装路径控制
CMAKE_INSTALL_PREFIX
- 作用:指定安装路径前缀(默认
/usr/local
)。 - 示例:
set(CMAKE_INSTALL_PREFIX "/opt/myapp") # 安装到 /opt/myapp
CMAKE_INSTALL_RPATH
- 作用:设置安装目标的 RPATH(运行时库搜索路径)。
- 示例:
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib") # 相对路径查找库
4. 生成器与构建系统
CMAKE_GENERATOR
- 作用:指定生成器(如
Ninja
、Unix Makefiles
)。 - 示例:
cmake -G Ninja .. # 使用 Ninja 替代 Make
CMAKE_VERBOSE_MAKEFILE
- 作用:显示详细的构建命令(调试时有用)。
- 示例:
set(CMAKE_VERBOSE_MAKEFILE ON)
5. 跨平台与特性检测
CMAKE_SYSTEM_NAME
- 作用:指定目标系统(如
Linux
、Windows
、Android
)。 - 示例:
set(CMAKE_SYSTEM_NAME Linux) # 交叉编译时指定目标系统
CMAKE_FIND_ROOT_PATH
- 作用:指定交叉编译时的根目录搜索路径。
- 示例:
set(CMAKE_FIND_ROOT_PATH "/opt/arm-sysroot")
6. 模块与依赖查找
CMAKE_MODULE_PATH
- 作用:添加自定义 CMake 模块的搜索路径。
- 示例:
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
CMAKE_PREFIX_PATH
- 作用:指定查找依赖库的额外路径(如自定义安装的库)。
- 示例:
set(CMAKE_PREFIX_PATH "/opt/boost;/opt/opencv")
7. 测试与打包
CMAKE_CTEST_COMMAND
- 作用:指定
ctest
的路径(用于测试)。 - 示例:
set(CMAKE_CTEST_COMMAND "/usr/bin/ctest")
CPACK_GENERATOR
- 作用:指定打包工具(如
ZIP
、DEB
、RPM
)。 - 示例:
set(CPACK_GENERATOR "DEB") # 生成 .deb 包
8. 调试与诊断
CMAKE_DEBUG_TARGET_PROPERTIES
- 作用:打印目标的属性(调试时有用)。
- 示例:
set(CMAKE_DEBUG_TARGET_PROPERTIES ON)
CMAKE_MESSAGE_LOG_LEVEL
- 作用:控制 CMake 日志级别(
DEBUG
/VERBOSE
/STATUS
/WARNING
/ERROR
)。 - 示例:
set(CMAKE_MESSAGE_LOG_LEVEL DEBUG) # 显示详细日志
9. 其他实用变量
CMAKE_EXECUTABLE_SUFFIX
- 作用:指定可执行文件的后缀(如
.exe
)。 - 示例:
set(CMAKE_EXECUTABLE_SUFFIX ".bin") # 生成 myapp.bin
CMAKE_COLOR_MAKEFILE
- 作用:控制 Makefile 输出的颜色(默认
ON
)。 - 示例:
set(CMAKE_COLOR_MAKEFILE OFF) # 禁用彩色输出
总结
这些变量可以灵活控制 CMake 的构建行为,适用于:
- 优化构建(如
CMAKE_BUILD_TYPE
、CMAKE_CXX_FLAGS
) - 跨平台支持(如
CMAKE_TOOLCHAIN_FILE
) - 依赖管理(如
CMAKE_PREFIX_PATH
) - 调试与诊断(如
CMAKE_VERBOSE_MAKEFILE
)
建议结合项目需求选择合适的变量,并通过 message()
打印变量值验证其效果:
message(STATUS "CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")