在 CMake 中,add_definitions 函数用于向编译器添加预定义的宏定义。这些宏定义可以在编译源文件时使用,以便在代码中条件编译或设置特定的编译选项。
基本语法
add_definitions(-D<DEFINE>)
- D: 要定义的宏名称。在大多数编译器中,使用 -D 参数可以定义一个宏。
示例
以下是几个使用 add_definitions 的示例:
1. 定义一个简单的宏
cmake_minimum_required(VERSION 3.10)
project(AddDefinitionsExample)# 添加宏定义
add_definitions(-DENABLE_FEATURE)# 生成可执行文件
add_executable(my_program main.cpp)
在这个示例中,我们通过 add_definitions 定义了一个名为 ENABLE_FEATURE 的宏。在编译 main.cpp 文件时,预处理阶段会将 ENABLE_FEATURE 宏定义为一个空值,可以在代码中使用条件编译来控制特定的功能。
2. 定义一个带值的宏
cmake_minimum_required(VERSION 3.10)
project(AddDefinitionsValueExample)# 添加宏定义
add_definitions(-DMESSAGE_LEVEL=2)# 生成可执行文件
add_executable(my_program main.cpp)
在这个示例中,我们定义了一个名为 MESSAGE_LEVEL 的宏,并设置其值为 2。在编译过程中,可以根据 MESSAGE_LEVEL 的值来控制输出或功能的详细程度。
注意事项
- 全局影响: add_definitions 添加的宏定义会对所有通过 add_executable 或 add_library 定义的目标生效。这意味着所有的源文件都可以使用这些宏定义。
- 替代选项: 对于使用现代 CMake 的项目,推荐使用 target_compile_definitions 命令,它可以更精确地将宏定义应用于特定的目标(例如,可执行文件或库)。
使用 target_compile_definitions 替代 add_definitions
虽然 add_definitions 可以全局添加宏定义,但推荐使用更精确的 target_compile_definitions 命令来指定宏定义,例如:
cmake_minimum_required(VERSION 3.10)
project(TargetCompileDefinitionsExample)# 定义一个可执行文件
add_executable(my_program main.cpp)# 添加宏定义给目标
target_compile_definitions(my_program PRIVATE ENABLE_FEATURE MESSAGE_LEVEL=2)
在这个示例中,我们将 ENABLE_FEATURE 和 MESSAGE_LEVEL 宏定义添加到 my_program 可执行文件。PRIVATE 表示这些宏定义只对 my_program 目标有效,而不会影响其他目标。
总结
add_definitions 函数是向 CMake 项目中添加预定义宏定义的一种方法。虽然它可以全局影响项目中的所有目标,但在使用现代 CMake 时,更推荐使用 target_compile_definitions 命令,以便更精确地控制宏定义的作用范围。