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

CMake链接自定义库时如何实现<mylibrary/mylibrary.h>形式引入头文件

解决方法

完全可以通过CMake配置实现该需求,无需修改现有源码目录结构,这里提供两种适配不同CMake版本的方案:

方案1:兼容CMake 3.20及以上(适配你当前的最低版本要求)

核心思路是在构建目录自动生成符合包含路径要求的头文件结构,再将对应目录公开给依赖项目。
修改后的CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.20)
set(CMAKE_CXX_STANDARD 23)
project(mylibrary)

add_library(mylibrary src/mylibrary.h src/mylibrary.cpp)

# 生成构建目录下的mylibrary头文件目录
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mylibrary)

# 构建时自动同步最新的头文件到对应目录
add_custom_command(
    TARGET mylibrary PRE_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
    ${CMAKE_CURRENT_SOURCE_DIR}/src/mylibrary.h
    ${CMAKE_CURRENT_BINARY_DIR}/mylibrary/mylibrary.h
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/mylibrary.h
)

# 公开构建目录为头文件搜索根目录,替换原有的src目录配置
target_include_directories(mylibrary PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
    $<INSTALL_INTERFACE:include>
)

# 如果需要安装库,添加以下安装配置
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mylibrary/mylibrary.h
    DESTINATION include/mylibrary
)

配置完成后,依赖项目就可以直接用#include <mylibrary/mylibrary.h>引入头文件。

方案2:CMake 3.23及以上版本,使用FILE_SET特性更规范

CMake 3.23新增的FILE_SET可以直接自定义头文件的包含路径前缀,无需手动复制文件,配置更简洁:

cmake_minimum_required(VERSION 3.23)
set(CMAKE_CXX_STANDARD 23)
project(mylibrary)

add_library(mylibrary src/mylibrary.cpp)

# 配置头文件路径映射
target_sources(mylibrary PUBLIC
    FILE_SET HEADERS
    BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src
    FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/mylibrary.h
    PREFIX "mylibrary" # 自动为头文件添加mylibrary/的路径前缀
)

# 可选安装配置
install(TARGETS mylibrary
    FILE_SET HEADERS DESTINATION include
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:45:07