2012-10-20 17 views
22

Czy można podać katalog uwzględniania podczas uruchamiania cmake. Na przykładOkreślanie katalogów uwzględniania w wierszu polecenia cmake

cmake . -INCLUDE=/foo/bar 

Pliki nagłówkowe są w osobnym katalogu ze źródłami, które chciałbym, aby skompilować i chciałbym zaradzić bez majstrować przy Makefile generowanego przez cmake.

Aktualizacja

Projekt ma CMakeLists.txt. Fragment:

INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src) 
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga) 
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils) 

Czy można ustawić ${EO_SOURCE_DIR} z wiersza poleceń?

+1

Ale nie możesz zmodyfikować CMakeLists.txt? – tpg2114

+0

@Oumide Zobacz moją zaktualizowaną odpowiedź. – Fraser

Odpowiedz

9

Jeśli ścieżka do nagłówków jest ustalona w odniesieniu do twoich źródeł, wtedy powinieneś być w stanie uniknąć konieczności przekazywania tych informacji za pośrednictwem wiersza poleceń.

Say struktura katalogów danego projektu jest:

/CMakeLists.txt 
/my_sources/main.cpp 
/my_sources/foo.cpp 
/my_includes/foo.hpp 

iw swoim CMakeLists.txt, obecnie masz coś takiego:

add_executable(MyExe my_sources/main.cpp my_sources/foo.cpp) 

następnie dodać folder /my_includes do listy m.in. ścieżki wyszukiwania, wystarczy tylko dodać:

include_directories(my_includes) 


W celu uzyskania dalszych informacji o include_directories uruchom

cmake --help-command include_directories 

Odbierz zaktualizować w pytaniu:

Tak, korzystając z opcji wiersza poleceń -D prostu zrobić

cmake . -DEO_SOURCE_DIR:PATH=<Path to required dir> 

zmienna ${EO_SOURCE_DIR} zostaje zbuforowana w wyniku t jego, więc potrzebujesz tylko tego argumentu -D jeden raz (chyba że wymagana ścieżka zmieni się lub usuniesz plik CMakeCache, itp.)

6

właściwy sposób to zrobić, aby zdefiniować zmienną w CMakeLists.txt i poprosić użytkownika, aby ustawić go:

set(YOURLIB_INCLUDE_DIR "" CACHE FILEPATH "Path to yourlib includes") 

if(NOT YOURLIB_INCLUDE_DIR/header.h) 
    message(SEND_ERROR "Can't find header.h in ${YOURLIB_INCLUDE_DIR}) 
endif() 

include_directories(${YOURLIB_INCLUDE_DIR}) 

Teraz można ustawić go z linii poleceń: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .

+0

Czy możliwe jest zawarcie wielu katalogów zawierających z linii poleceń za pomocą rozwiązania? – Johannes

+2

Spróbuj wymieniać katalogi, oddzielając je od ';'. – arrowd

+0

Oczywiście, ale niektórzy deweloperzy są zbyt uparci, aby to zrobić. –

Powiązane problemy