如何配置CMake使其执行cmake install时自动复制include目录下的头文件
CMake原生支持该需求,无需额外脚本或分支判断,仅需借助内置模块和标准install指令即可实现,修改方案如下:
操作步骤
- 引入CMake内置的
GNUInstallDirs模块,该模块会自动适配操作系统生成符合规范的标准安装路径,其中CMAKE_INSTALL_INCLUDEDIR变量恰好对应你需要的头文件安装目标路径:- POSIX系统下默认值为
/usr/local/include - Windows系统下默认值为对应编译器的
include目录
- POSIX系统下默认值为
- 将全局
include_directories替换为目标专属的target_include_directories,分别声明构建阶段和安装后的头文件搜索路径,方便后续其他项目通过find_package依赖你的库时自动识别头文件位置。 - 添加
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
相关产品推荐
相关产品推荐

