2012-10-20 27 views
22

È possibile specificare una directory di inclusione quando si esegue cmake. Per esempioSpecifica delle directory di inclusione sulla riga di comando cmake

cmake . -INCLUDE=/foo/bar 

I file di intestazione sono in una directory separata dalle fonti che vorrei per la compilazione, e vorrei porre rimedio a questa, senza armeggiare con la Makefile generato da cmake.

Aggiornamento

Il progetto ha un CMakeLists.txt. Estratto:

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

Può ${EO_SOURCE_DIR} essere impostato dalla riga di comando?

+1

Ma non è possibile modificare il CMakeLists.txt? – tpg2114

+0

@Olumide Vedi la mia risposta aggiornata. – Fraser

risposta

9

Se il percorso alle intestazioni è fisso in relazione alle tue fonti, quindi dovresti essere in grado di evitare di dover passare queste informazioni tramite la riga di comando.

Dire struttura di directory del progetto è:

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

e nella tua CMakeLists.txt, attualmente avete qualcosa di simile:

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

quindi per aggiungere la cartella /my_includes alla lista degli includere percorsi di ricerca, è sufficiente aggiungere quanto segue:

include_directories(my_includes) 


Per ulteriori informazioni su include_directories, eseguire

cmake --help-command include_directories 

risposta per aggiornare in questione:

Sì, utilizzando l'opzione della riga -D di comando basta fare

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

Il variabile ${EO_SOURCE_DIR} viene memorizzata nella cache come risultato di t il suo, quindi è necessario solo questo argomento -D una volta (a meno che il percorso richiesto non cambi o si cancelli il file CMakeCache, ecc.)

6

modo corretto per farlo è quello di definire una variabile in CMakeLists.txt e chiedere all'utente di impostare:

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

Ora è possibile impostare dalla riga di comando: cmake -D YOURLIB_INCLUDE_DIR=/path/to/yourlib/include .

+0

È possibile includere più directory di inclusione da riga di comando con la soluzione? – Johannes

+2

Prova ad elencare le directory, separandole con ';'. – arrowd

+0

Certo, ma alcuni sviluppatori sono troppo testardi per farlo. –

Problemi correlati