CMake如何将嵌套目录的头文件直接安装至include根目录?
解决CMake安装头文件时移除子目录的问题
核心解决方案
要将bar/barexample.h直接安装到<someprefix>/include目录(而非<someprefix>/include/bar),同时保留sample.h的安装路径,你需要在src/CMakeLists.txt中直接指定头文件的安装目标,而非依赖默认的目录结构传递。以下是两种可行方法:
方法1:逐个指定头文件安装路径
直接使用install(FILES)指令,明确每个头文件的最终安装位置:
# 将sample.h安装到include根目录 install(FILES sample.h DESTINATION include) # 将bar目录下的barexample.h直接安装到include根目录,忽略原bar子目录结构 install(FILES bar/barexample.h DESTINATION include)
方法2:批量处理+单独指定子目录文件
如果src目录下有多个根目录头文件,可先批量安装,再单独处理子目录中的目标文件:
# 安装src目录下所有.h文件到include根目录(自动排除bar子目录) install(DIRECTORY . DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN "bar" EXCLUDE) # 单独将bar目录下的barexample.h安装到include根目录 install(FILES bar/barexample.h DESTINATION include)
为什么之前的指令无效?
target_include_directories:仅用于指定编译阶段的头文件搜索路径,完全不影响安装时的文件结构。target_sources:仅将文件添加到编译目标中,不控制文件的安装路径和结构。
内容的提问来源于stack exchange,提问作者dodo
相关产品推荐
相关产品推荐

