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

如何在CMake中无需编译安装Framework目标的头文件?

解决Framework目标下无需编译即可安装头文件的问题

当目标是Framework时,仅通过install(FILES)复制头文件会缺少Foo.framework/Versions/Current/Headers和Foo.framework/Headers这两个关键符号链接——这两个链接是CMake通过install(TARGETS)安装Framework时自动生成的,但如果不想编译库,就需要手动添加创建链接的步骤。

完整CMake配置示例

project(Foo)
add_library(Foo foo.cpp foo.h)
set_target_properties(Foo PROPERTIES FRAMEWORK TRUE PUBLIC_HEADER "foo.h")

# 1. 安装头文件到Framework的Versions/A/Headers目录
install(FILES foo.h 
        DESTINATION Foo.framework/Versions/A/Headers 
        COMPONENT headers)

# 2. 创建Versions/Current/Headers符号链接,指向A/Headers
install(CODE "execute_process(
    COMMAND ${CMAKE_COMMAND} -E remove -f
        \${CMAKE_INSTALL_PREFIX}/Foo.framework/Versions/Current/Headers
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        A/Headers
        \${CMAKE_INSTALL_PREFIX}/Foo.framework/Versions/Current/Headers
)" COMPONENT headers)

# 3. 创建顶层Foo.framework/Headers符号链接,指向Versions/Current/Headers
install(CODE "execute_process(
    COMMAND ${CMAKE_COMMAND} -E remove -f
        \${CMAKE_INSTALL_PREFIX}/Foo.framework/Headers
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        Versions/Current/Headers
        \${CMAKE_INSTALL_PREFIX}/Foo.framework/Headers
)" COMPONENT headers)

# 自定义installheaders目标,仅安装headers组件
add_custom_target(installheaders 
    COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=headers
            -P "${CMAKE_BINARY_DIR}/cmake_install.cmake"
)

关键说明

  • 所有安装步骤都指定了COMPONENT headers,确保仅在执行installheaders目标时触发,不会强制编译库文件。
  • 使用CMAKE_COMMAND -E create_symlink创建符号链接,同时先执行remove -f避免已存在链接导致的错误。
  • 执行make installheaders(或对应生成器命令如ninja installheaders)即可完成头文件和符号链接的安装,无需编译Framework库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:25