2011-12-19 12 views
5

ho una struttura di directory di origine:l'installazione di alcuni file con CMake

projectSource 
|---src 
|---include 
|---CMakeLists.txt 

e vorrei una struttura di directory di installazione di

projectInstall 
|---bin 
|---include 
|---lib 

La mia fonte di directory è tutto sotto controllo di versione, in modo che ogni fonte la cartella contiene una directory aggiuntiva .svn/. Qual è il modo più semplice per installare tutti i file di intestazione da projectSource/include a projectInstall/include, ignorando le directory .svn?

mi piacerebbe usare qualcosa come:

set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) 
include_directories(${PROJECT_INCLUDE_DIR}) 
install(DIRECTORY ${PROJECT_INCLUDE_DIR}/ 
    DESTINATION "include" 
    FILES_MATCHING PATTERN "*.h" 
    PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) 

ma anche se sto (cercando di) installare solo i file che corrispondono *.h, sto ancora raccogliendo la directory .svn/ e contenuti.

risposta

12

È possibile aggiungere EXCLUDE parola chiave per il modello:

install(DIRECTORY ${PROJECT_INCLUDE_DIR}/ 
    DESTINATION "include" 
    FILES_MATCHING 
    PATTERN "*.h" 
    PATTERN ".svn" EXCLUDE 
    PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) 
+0

Usando 'A FUOCO ".svn" EXCLUDE' ha funzionato, ma la mia impressione di' FILES_MATCHING FUOCO '* .h' 'era che solo i file che corrispondono quel modello sarebbe installato. Non è questo il caso? – Chris

+0

Sì, quando 'PATTERN' è usato senza' EXCLUDE', installa solo pattern abbinati. Stavi vedendo roba svn abbinata perché .svn/dir contiene file con nomi che terminano con ".h". Quindi hai esplicitamente bisogno di dire a CMake di non guardare in .svn/dirs. – arrowd

+0

Vedo, grazie per la spiegazione. – Chris