2012-10-20 11 views
22

Ist es möglich, ein Include-Verzeichnis anzugeben, wenn cmake ausgeführt wird. Zum BeispielAngeben von Include-Verzeichnissen in der Cmake-Befehlszeile

cmake . -INCLUDE=/foo/bar 

Die Header-Dateien sind in einem separaten Verzeichnis aus den Quellen, die ich kompilieren möchte, und ich würde das gerne beheben, ohne die von cmake erzeugt Makefile bastelt.

aktualisieren

Das Projekt hat eine CMakeLists.txt haben. Auszug:

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

Kann ${EO_SOURCE_DIR} von der Kommandozeile gesetzt werden?

+1

Sie können die CMakeLists.txt nicht ändern? – tpg2114

+0

@Olumide Siehe meine aktualisierte Antwort. – Fraser

Antwort

9

Wenn der Pfad Wenn Ihre Header in Bezug auf Ihre Quellen festgelegt sind, sollten Sie vermeiden können, dass Sie diese Informationen über die Befehlszeile weiterleiten müssen.

Sagen Sie Ihre Verzeichnisstruktur des Projekts ist:

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

und in Ihrem CMakeLists.txt, Sie haben etwas Zeit wie:

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

dann den /my_includes Ordner in die Liste der hinzuzufügen sind Suchpfade müssen Sie nur Folgendes hinzufügen:

include_directories(my_includes) 


Für weitere Informationen über include_directories, laufen

cmake --help-command include_directories 

Antwort in Frage zu aktualisieren:

Ja, mit der -D Befehlszeilenoption tun nur

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

Die Variable ${EO_SOURCE_DIR} wird als Ergebnis von t zwischengespeichert sein, also brauchen Sie nur dieses -D Argument einmal (außer der erforderliche Pfad ändert sich oder Sie löschen Ihre CMakeCache Datei, etc.)

6

Der richtige Weg, dies zu tun, ist eine Variable in CMakeLists.txt zu definieren und fragen Benutzer es zu setzen:

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}) 

Jetzt können Sie es von der Befehlszeile ein: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .

+0

Ist es möglich, mehrere Include-Verzeichnisse von der Befehlszeile in Ihre Lösung einzubinden? – Johannes

+2

Versuchen Sie Verzeichnisse aufzulisten, indem Sie sie mit ';' trennen. – arrowd

+0

Sicher, aber einige Entwickler sind zu stur, um dies zu tun. –