代码之家  ›  专栏  ›  技术社区  ›  Red XIII

将目标属性添加到CMake中现有的导入库中

  •  0
  • Red XIII  · 技术社区  · 7 年前

    外部项目由CMake构建并安装在通过 CMAKE_PREFIX_PATH 由于它是CMake项目,因此安装正确 .cmake 文件夹。在这些自动生成的文件中 EXPORTED 创建目标并设置所有必需的属性。

    我想做的是,不修改原文 CMakeLists.txt -添加一个编译定义,我需要它来正确地包含这个库的头文件。

    到目前为止,我已经尝试了两种方法:

    重新添加库并正常指定定义

    add_library(_external_lib_name_ INTERFACE IMPORTED)
    target_compile_definitions(_external_lib_name_ INTERFACE FOO_BAR)
    

    只需添加定义

    target_compile_definitions(_external_lib_name_ INTERFACE FOO_BAR)
    

    这一次,CMake抱怨:

    CMake Error at foo.cmake:1 (target_compile_definitions):
      Cannot specify compile definitions for target "_external_lib_name_" which is not built by this project.
    

    add_library(_proxy_target_ INTERFACE)
    target_link_libraries(_proxy_target_ INTERFACE _external_lib_name_)
    target_compile_definitions(_proxy_target_ INTERFACE FOO_BAR)
    

    虽然这个方法可能有效,但有人知道是否有更好的方法来修改导入的目标吗?

    使现代化

    使用Tsyvarev的答案,我能够使其工作,但还有一个问题:为了正确修改目标,我需要 include 第一个 find_package 之后 set_property 包括 CMakeLists.txt add_subdirectory 目标持有旧财产。

    0 回复  |  直到 7 年前
        1
  •  3
  •   Tsyvarev    7 年前

    命令 target_compile_definitions 关键字附加到属性 INTERFACE_COMPILE_DEFINITIONS 但不适用于 已导入

    set_property(TARGET _external_lib_name_ APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS FOO_BAR)
    
    推荐文章