如何通过cmake定义预处理器变量?
等效代码为 #define foo .
#define foo
很长一段时间,CMake为此目的使用了 add_definitions 命令 . 但是,最近该命令已被更精细的方法取代(编译定义,包含目录和编译器选项的单独命令) .
add_definitions
使用新add_compile_definitions的示例:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION}) add_compile_definitions(WITH_OPENCV2)
要么:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
关于这一点的好处是它绕开了CMake为 add_definitions 设置的破旧诡计 . CMake是一个如此破旧的系统,但他们终于找到了一些理智 .
在此处查找有关用于编译器标志的命令的更多说明:https://cmake.org/cmake/help/latest/command/add_definitions.html
同样,你可以按照Jim Hunziker的回答中所解释的那样按目标执行此操作 .
要为特定目标执行此操作,您可以执行以下操作:
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
如果您正在构建多个目标并且不希望它们都使用相同的标志,则应该执行此操作 .
此页面上提出的其他解决方案仅适用于Cmake的旧版本 . 这是新版本的解决方案 . 使用$ cmake --version检查Cmake的版本,然后选择符合您需求的解决方案 . cmake文档可以在官方页面上找到 .
使用CMake版本3.3.2,以便创建
我需要使用:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt add_executable( ....) target_link_libraries(....)
并且,为了具有像这样的另一个预处理器宏定义:
#define foo=5
这条线是如此修改:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt add_executable( ....) target_link_libraries(....)
3 回答
很长一段时间,CMake为此目的使用了
add_definitions
命令 . 但是,最近该命令已被更精细的方法取代(编译定义,包含目录和编译器选项的单独命令) .使用新add_compile_definitions的示例:
要么:
关于这一点的好处是它绕开了CMake为
add_definitions
设置的破旧诡计 . CMake是一个如此破旧的系统,但他们终于找到了一些理智 .在此处查找有关用于编译器标志的命令的更多说明:https://cmake.org/cmake/help/latest/command/add_definitions.html
同样,你可以按照Jim Hunziker的回答中所解释的那样按目标执行此操作 .
要为特定目标执行此操作,您可以执行以下操作:
如果您正在构建多个目标并且不希望它们都使用相同的标志,则应该执行此操作 .
使用CMake版本3.3.2,以便创建
我需要使用:
并且,为了具有像这样的另一个预处理器宏定义:
这条线是如此修改: