You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake安装目标时如何导出目标的自定义属性

CMake install导出目标自定义属性方法

默认情况下,install(EXPORT) 仅会导出CMake内置的目标属性,不会自动包含用户自定义属性,不过可以通过简单配置实现自定义属性的导出,适配你给出的示例的具体操作如下:

修正原有代码的属性赋值错误

你原有代码中给多值属性赋值的写法有误:

# 错误写法:CMake会将TCP识别为新的属性名,UDP识别为TCP属性的值
set_target_properties(protocols PROPERTIES PROTOCOLS_LIST "IP" "TCP" "UDP")

多值属性需要传入分号分隔的列表字符串,正确写法如下:

set_target_properties(protocols PROPERTIES PROTOCOLS_LIST "IP;TCP;UDP")

配置自定义属性导出

根据你的CMake最低版本要求(3.14),两种实现方式二选一即可:

  • 方式1:通过EXPORT_PROPERTIES目标属性指定导出列表(最简便)
    EXPORT_PROPERTIES是CMake 3.12版本引入的内置目标属性,直接把需要额外导出的自定义属性名加到这个属性里即可,不需要额外全局声明,完整示例代码如下:

    cmake_minimum_required(VERSION 3.14.0)
    project(exported_props LANGUAGES CXX)
    
    add_library(protocols ...)
    set_target_properties(protocols PROPERTIES 
        PROTOCOLS_LIST "IP;TCP;UDP"
        # 指定要额外导出的自定义属性
        EXPORT_PROPERTIES "PROTOCOLS_LIST"
    )
    
    install(TARGETS protocols EXPORT protocol)
    install(EXPORT protocol DESTINATION ${CMAKE_BINARY_DIR})
    
  • 方式2:全局声明可导出的自定义属性
    如果你的多个目标都会用到PROTOCOLS_LIST这个属性,可以用define_property全局声明该属性支持导出,所有设置了该属性的目标在导出时都会自动携带属性值,完整示例代码如下:

    cmake_minimum_required(VERSION 3.14.0)
    project(exported_props LANGUAGES CXX)
    
    # 全局声明自定义目标属性可导出
    define_property(TARGET PROPERTY PROTOCOLS_LIST
        BRIEF_DOCS "Supported protocol list"
        FULL_DOCS "List of network protocols provided by the library"
        EXPORT # 标记该属性可随目标导出
    )
    
    add_library(protocols ...)
    set_target_properties(protocols PROPERTIES 
        PROTOCOLS_LIST "IP;TCP;UDP"
    )
    
    install(TARGETS protocols EXPORT protocol)
    install(EXPORT protocol DESTINATION ${CMAKE_BINARY_DIR})
    

效果验证

重新执行CMake配置、构建、安装流程后,打开生成的protocol.cmake文件就能看到PROTOCOLS_LIST属性的设置逻辑。外部项目导入该目标后,可以直接通过get_target_property命令读取属性值:

find_package(protocol REQUIRED)
get_target_property(SUPPORT_PROTOCOLS protocols PROTOCOLS_LIST)
# SUPPORT_PROTOCOLS的值为IP;TCP;UDP

内容的提问来源于stack exchange,提问作者AmirSalar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:18:21