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

CMake如何正确将PUBLIC_HEADER属性设置为多个头文件列表

问题根因

你遇到的问题是CMake列表展开逻辑导致的:RST_PUBLIC_HEADERS是存储了3个文件路径的CMake列表,底层以分号分隔不同值。在set_target_properties中直接使用${RST_PUBLIC_HEADERS}时,CMake会把列表拆分为3个独立参数,最终PUBLIC_HEADER属性只会被赋值为第一个参数rst.hpp,剩下的两个文件名会被识别为无效属性名直接忽略。

解决方案

只需给${RST_PUBLIC_HEADERS}套一层双引号,把整个列表作为单个值传递给PUBLIC_HEADER属性即可,修改后的配置代码如下:

set(RST_PUBLIC_HEADERS
    "rst.hpp"
    "CPrbs.hpp"
    "CRstController.hpp"
    )
set_target_properties( ${PROJECT_NAME} PROPERTIES
    VERSION ${PROJECT_VERSION}
    FRAMEWORK TRUE
    PUBLIC_HEADER "${RST_PUBLIC_HEADERS}"
    )
install(TARGETS ${PROJECT_NAME}
    LIBRARY DESTINATION lib
    PUBLIC_HEADER DESTINATION include/lib${PROJECT_NAME}
    )

修改后重新配置项目,get_target_property即可读取到完整的3个文件列表,安装时3个头文件都会被自动写入指定路径,无需额外使用install(FILES)单独处理。

扩展注意事项

该规则适用于所有CMake中接收列表类型值的属性配置场景:比如设置INTERFACE_SOURCES、INTERFACE_COMPILE_DEFINITIONS等属性时,如果传入的是列表变量,都需要用双引号包裹,避免参数拆分导致赋值异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:00