CMAKE中添加宏定义
文章目录
- CMAKE中添加宏定义
- 1. 使用 `add_definitions()`
- 2. 使用 `target_compile_definitions()`
- 3. 使用 `add_compile_options()`
- 4. 用 CMake 命令行传递宏定义
- 5. 定义带值的宏
- 6. 使用 `configure_file()` 定义宏
- 总结
在 CMake 中添加宏定义有多种方式,主要通过
add_definitions()
或
target_compile_definitions()
来实现宏定义。这里是几种常用的方法:
1. 使用 add_definitions()
add_definitions()
用来为整个项目或者全局范围内添加宏定义,适合对所有目标都生效的宏。
add_definitions(-DENABLE_DEBUG)
🔹 示例:
add_definitions(-DDEBUG_MODE) # 定义 DEBUG_MODE 宏
编译后相当于每个文件都带有 -DDEBUG_MODE
选项。
2. 使用 target_compile_definitions()
target_compile_definitions()
用于 指定目标 的宏定义,控制更加精确,通常推荐用这种方式。
target_compile_definitions(<target> PUBLIC ENABLE_DEBUG)
🔹 示例:
target_compile_definitions(my_executable PRIVATE ENABLE_LOG) # 仅对 my_executable 添加 ENABLE_LOG 宏
这里的作用范围可以是:
- PRIVATE:宏仅适用于目标
my_executable
。 - PUBLIC:宏适用于目标
my_executable
及其依赖的目标。 - INTERFACE:宏仅适用于依赖该目标的其他目标,而不作用于
my_executable
本身。
3. 使用 add_compile_options()
你也可以通过 add_compile_options()
添加编译选项,定义宏:
add_compile_options(-DENABLE_FEATURE)
4. 用 CMake 命令行传递宏定义
你还可以通过 命令行 传递宏定义,直接将宏添加到 CMake 编译过程中:
cmake -DENABLE_DEBUG=ON ..
在 CMake 脚本中可以使用 option()
来控制宏定义:
option(ENABLE_DEBUG "启用调试模式" OFF)if(ENABLE_DEBUG)add_definitions(-DENABLE_DEBUG)
endif()
5. 定义带值的宏
可以定义带有具体值的宏:
add_definitions(-DVERSION_NUMBER=2)
或者用 target_compile_definitions()
:
target_compile_definitions(my_target PRIVATE VERSION_NUMBER=3)
6. 使用 configure_file()
定义宏
通过 configure_file()
创建一个带宏定义的头文件:
configure_file(config.h.in config.h)# config.h.in 文件内容
#define VERSION_MAJOR @VERSION_MAJOR@
#define VERSION_MINOR @VERSION_MINOR@
CMake 中定义变量:
set(VERSION_MAJOR 1)
set(VERSION_MINOR 0)
总结
- 全局宏:
add_definitions(-DMACRO)
适合全局生效。 - 目标级别宏:
target_compile_definitions(target PRIVATE MACRO)
更加灵活精确。 - 命令行宏:可通过 CMake 命令行传递
cmake -DENABLE_DEBUG=ON ..
。 - 配置头文件:通过
configure_file()
在头文件中定义宏。