Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cmake glob include while preserving directory structure

I'm new to cmake and I'm trying to install .hpp files while preserving directory structure.

So far I have

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)

All the files get found but the directory hierarchy is flattened.

FWIW The bjam command I'm trying to emulate is

install headers 
    : ../include/EnsembleLearning.hpp  
      [ glob ../include/MyLib/*.hpp ]  
      [ glob ../include/MyLib/detail/*.hpp ]  
    : <install-source-root>../include ;
like image 775
Tom Avatar asked Jun 02 '11 15:06

Tom


1 Answers

You can use the DIRECTORY variant of the CMake install command. This command will preserve the structure of the copied directory:

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

If the directory to be copied contains subdirectories that should not be installed, you'll have to explicitly exclude those with a PATTERN EXCLUDE option:

install(DIRECTORY include/ DESTINATION include
          FILES_MATCHING PATTERN "*.hpp"
          PATTERN "include/MyOtherLib" EXCLUDE)
like image 132
sakra Avatar answered Oct 15 '22 00:10

sakra