2013-03-16 25 views
12

Ho un progetto con la seguente disposizione:CMake non riesce a trovare includere file

/build 
    /source 
     +--- CMakeLists.txt 
     | 
     +--- /bin 
     |  +--CMakefiles.txt 
     |  +--main.cpp 
     | 
     +--- /jsoncpp 
     |  +--- /json 
     |  |  +--json.h 
     |  |  +--json-forwards.h 
     |  | 
     |  +--jsoncpp.cpp 
     |  +--CMakeLists.txt 
     | 
     +--- /jsonreader 
       +-- jsonreader.cpp 
       +-- jsonreader.h 
       +-- CMakeLists.txt 

In /source/CMakeLists.txt ho questa riga di codice;

include_directories(jsoncpp jsonreader) 

ma poi disattivato 'cmake -G "MSYS Makefiles" ../source' nella directory di compilazione genera Makefile e quindi eseguire 'make' genera il seguente errore:

Scanning dependencies of target updater 
[ 33%] Building CXX object bin/CMakeFiles/updater.dir/main.cpp.obj 
In file included from k:/own-projects/updater-Project/withJsonCpp/source/bin/main.cpp:2:0: 
../source/jsonreader/jsonreader.h:2:18: fatal error: json.h: No such file 
or directory 
compilation terminated. 
make[2]: *** [bin/CMakeFiles/updater.dir/main.cpp.obj] Error 1 
make[1]: *** [bin/CMakeFiles/updater.dir/all] Error 2 
make: *** [all] Error 2 

Che cosa sto facendo sbagliato e come posso risolvere questo?

+0

Non dovresti aggiungere jsoncpp/json ai tuoi include. O nei tuoi file C++ usi un percorso relativo? – drescherjm

+0

@drescherjm: nel mio C++ uso solo "include" header.h "indipendentemente dalla posizione dell'intestazione è sbagliato? L'aggiunta di jsoncpp/json non funziona – Amani

+0

Credo che tu voglia anteporre i tuoi percorsi di inclusione a $ { CMAKE_SOURCE_DIR} – drescherjm

risposta

16

C'erano due problemi. Per prima cosa è stato necessario aggiungere il percorso jsoncpp/json alle directory di inclusione. Tuttavia ciò indicava un secondo problema. Dal momento che i file eseguibili non nella cartella di origine si dovevano prefisso ${CMAKE_SOURCE_DIR} per i percorsi in modo che il include_directories() dovrebbe essere simile al seguente:

include_directories("${CMAKE_SOURCE_DIR}/jsoncpp" 
    "${CMAKE_SOURCE_DIR}/jsoncpp/json" 
    "${CMAKE_SOURCE_DIR}/jsonreader") 

ho aggiunto le virgolette solo per abitudine. Lo faccio la maggior parte del tempo con il mio CMakeLists.txt quindi non ci sono problemi con gli spazi nei percorsi.

+0

Ho trovato questa risposta per mezzo di un progetto ROS Per i potenziali futuri visitatori avevo bisogno ' include_directories (comprendere) ' – Jacksonkr

5

Amani,

Sembra come se si include "json.h" senza il suo percorso relativo. o È possibile includere in questo modo:

#include "json/json.h" 

O, nel file CMakeLists.txt, aggiungere la directory JSON alle directory includere:

include_directories(jsoncpp jsoncpp/json jsonreader) 
Problemi correlati