首页 文章

通过cmake定义预处理器宏

提问于
浏览
225

如何通过cmake定义预处理器变量?

等效代码为 #define foo .

3 回答

  • 327

    很长一段时间,CMake为此目的使用了 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的回答中所解释的那样按目标执行此操作 .

  • 6

    要为特定目标执行此操作,您可以执行以下操作:

    target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
    

    如果您正在构建多个目标并且不希望它们都使用相同的标志,则应该执行此操作 .

  • 202

    此页面上提出的其他解决方案仅适用于Cmake的旧版本 . 这是新版本的解决方案 . 使用$ cmake --version检查Cmake的版本,然后选择符合您需求的解决方案 . cmake文档可以在官方页面上找到 .

    使用CMake版本3.3.2,以便创建

    #define foo
    

    我需要使用:

    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(....)
    

相关问题