You need to enable JavaScript to run this app. 如何配置CMake使其执行cmake install时自动复制include目录下的头文件
优惠活动
大模型
产品
解决方案
定价
更多

如何配置CMake使其执行cmake install时自动复制include目录下的头文件

CMake原生支持该需求,无需额外脚本或分支判断,仅需借助内置模块和标准install指令即可实现,修改方案如下:

操作步骤

  1. 引入CMake内置的GNUInstallDirs模块,该模块会自动适配操作系统生成符合规范的标准安装路径,其中CMAKE_INSTALL_INCLUDEDIR变量恰好对应你需要的头文件安装目标路径:
    • POSIX系统下默认值为/usr/local/include
    • Windows系统下默认值为对应编译器的include目录
  2. 将全局include_directories替换为目标专属的target_include_directories,分别声明构建阶段和安装后的头文件搜索路径,方便后续其他项目通过find_package依赖你的库时自动识别头文件位置。
  3. 添加install(DIRECTORY)指令,直接递归安装你本地./include目录下的所有头文件到目标路径。

修改后完整CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project (
  learn_c_library
  VERSION 1.0.0
  LANGUAGES C
)

# 引入内置的标准安装路径模块
include(GNUInstallDirs)

# Specify CMake build and output directory
set(CMAKE_BINARY_DIR "${PROJECT_SOURCE_DIR}/.cmake")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out")

# Use every .c file inside ./src
file(GLOB_RECURSE MY_SOURCE_PATH "src/*")

add_library(
  ${PROJECT_NAME} SHARED
  ${MY_SOURCE_PATH}
)

# 替换原include_directories,声明头文件路径
target_include_directories(${PROJECT_NAME}
  PUBLIC
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

# 安装共享库到标准库路径
install(TARGETS ${PROJECT_NAME}
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

# 安装头文件到标准include路径
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  FILES_MATCHING PATTERN "*.h"
)

内容的提问来源于stack exchange,提问作者Thor-x86_128

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:24:03