2011-06-02 97 views
13

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

到目前为止,我有

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 ; 

回答

14

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

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

如果要复制的目录中包含不应该安装的子目录,你必须明确排除那些具有PAT排除选项:

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

+1好极了,这正是我一直在寻找的,谢谢! – Tom 2011-06-03 05:30:37

+0

这对目前cmake-2.8.5不适用。要么没有安装文件,要么我省略了FILES_MATCHING行,所有的东西都被安装了。有任何想法吗? – MKroehnert 2011-07-18 15:28:43

+0

适用于cmake-2.8.5。你可以发布一些代码吗? – sakra 2011-07-18 17:45:57