cmake-glob-include同时保留目录结构

cmake glob include while preserving directory structure

本文关键字:结构 保留 cmake-glob-include      更新时间:2023-10-16

我是cmake的新手,我正在尝试安装.hpp文件,同时保留目录结构。

到目前为止,我有

FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp"
  "${CMAKE_CURRENT_SOURCE_DIR}/include/MyLib/*.hpp"
  "${CMAKE_CURRENT_SOURCE_DIR}/include/MyLib/detail/*.hpp"
install (FILES ${files}  DESTINATION include)

所有文件都被找到了,但目录层次结构被展平了。

FWIW我试图模拟的bjam命令是

install headers 
    : ../include/EnsembleLearning.hpp  
      [ glob ../include/MyLib/*.hpp ]  
      [ glob ../include/MyLib/detail/*.hpp ]  
    : <install-source-root>../include ;

您可以使用CMake-install命令的DIRECTORY变体。此命令将保留复制目录的结构:

install(DIRECTORY include/ DESTINATION include
          FILES_MATCHING PATTERN "*.hpp")

如果要复制的目录包含不应该安装的子目录,则必须使用PATTERN exclude选项显式排除这些子目录:

install(DIRECTORY include/ DESTINATION include
          FILES_MATCHING PATTERN "*.hpp"
          PATTERN "include/MyOtherLib" EXCLUDE)