2015-01-16 7 views
15

Mam układ kodu źródłowego, który wygląda tak:Jak korzystać cmake GLOB_RECURSE tylko dla niektórych podkatalogów

TopDir/ 
    CMakeLists.txt 
    A.cpp 
    A.hpp 
    ... 
    File/ 
     F1.cpp 
     F1.hpp 
     ... 
    Section/ 
     S1.cpp 
     S1.hpp 
     ... 
    Test/ 
     CMakeLists.txt 
     TestF1S1.cpp 
     TestF2S2.cpp 
     ... 

Chcę uchwycić wszystkie .cpp pliki jako pliki źródłowe (ENDF6_SRC), więc w moim pliku TopDir/CMakeLists.txt mam linię, która wygląda tak:

file(GLOB_RECURSE ENDF6_SRC ${PROJECT_SOURCE_DIR} *.cpp) 

Ten chwyta wszystkie .cpp pliki TopDir/, File/, Section/ zgodnie z oczekiwaniami, ale również gr abs wszystkie pliki .cpp w Test/ również.

Jak tworzę zmienną ENDF6_SRC bez dodawania .cpp pliki z katalogu Test? Nie chcę pliku CMakeLists.txt w File/ lub Section/.

Odpowiedz

15

Jeśli nie masz podkatalogów wewnątrz „TopDir/plik” lub „TopDir/section”, można zrobić:

file(GLOB ENDF6_SRC 
     ${PROJECT_SOURCE_DIR}/*.cpp 
     ${PROJECT_SOURCE_DIR}/File/*.cpp 
     ${PROJECT_SOURCE_DIR}/Section/*.cpp) 

Jeśli zrobić mają tam podkatalogów, trzeba więcej niż jeden telefon:

file(GLOB ENDF6_SRC_TOP 
     ${PROJECT_SOURCE_DIR}/*.cpp) 
file(GLOB_RECURSE ENDF6_SRC_NESTED 
     ${PROJECT_SOURCE_DIR}/File/*.cpp 
     ${PROJECT_SOURCE_DIR}/Section/*.cpp) 
set(ENDF6_SRC ${ENDF6_SRC_TOP} ${ENDF6_SRC_NESTED}) 

Nawiasem mówiąc, robi file(GLOB_RECURSE ...) w katalogu najwyższego poziomu będzie prawdopodobnie podnieść niechciane pliki cpp z folderu build też w przypadku produkcji in-źródła (czyli gdzie korzeń build jest wewnątrz "TopDir").

Powiązane problemy