2013-03-16 13 views
12

ich ein Projekt mit dem folgenden Aufbau haben:CMake nicht finden können Dateien enthalten

/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 ich habe diese Codezeile;

include_directories(jsoncpp jsonreader) 

aber dann in Build-Verzeichnis 'cmake -G "MSYS Makefiles" ../source' läuft erzeugt Makefile und dann läuft 'make' erzeugt den folgenden Fehler:

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 

was ich tue falsch und wie kann ich das lösen?

+0

Sie sollten nicht jsoncpp/json zu Ihren Includes hinzufügen. Oder verwenden Sie in Ihren C++ - Dateien einen relativen Pfad? – drescherjm

+0

@drescherjm: in meinem C++ verwende ich nur "include" header.h "unabhängig von der Position der Kopfzeile ist das falsch? Das Hinzufügen von jsoncpp/json funktioniert nicht. – Amani

+0

Ich glaube, dass Sie Ihre Include-Pfade mit $ { CMAKE_SOURCE_DIR} – drescherjm

Antwort

16

Es gab zwei Probleme. Zuerst mussten Sie den Pfad zu Ihren Include-Verzeichnissen den Pfad jsoncpp/json hinzufügen. Dies wies jedoch auf ein zweites Problem hin. Da Ihre ausführbaren Dateien nicht im Quellordner Sie ${CMAKE_SOURCE_DIR}, um die Pfade Präfix benötigt, so dass die include_directories() wie folgt aussehen sollte:

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

habe ich Anführungszeichen nur aus Gewohnheit. Ich mache das die meiste Zeit mit meiner CMakeLists.txt, also gibt es keine Probleme mit Leerzeichen in Pfaden.

+0

Ich fand diese Antwort über ein ROS-Projekt.Für potentielle zukünftige Besucher brauchte ich ' include_directories (include) ' – Jacksonkr

5

Amani,

Es scheint, als ob Sie "json.h" ohne seinen relativen Pfad enthalten. Sie können entweder schließen es wie folgt aus:

#include "json/json.h" 

OR, in Ihrer CMakeLists.txt Datei, fügen Sie das json Verzeichnis zu den Include-Verzeichnisse:

include_directories(jsoncpp jsoncpp/json jsonreader) 
Verwandte Themen