2013-03-16 11 views
12

Mam projekt z następującym układzie:CUpewnij nie może znaleźć zawierać pliki

/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 

W /source/CMakeLists.txt mam ten wiersz kodu;

include_directories(jsoncpp jsonreader) 

ale potem działa 'cmake -G "MSYS makefile" ../source' w katalogu build generuje Makefile, a następnie uruchomić 'make' generuje następujący błąd:

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 

co robię źle i jak mogę to rozwiązać?

+0

Nie należy dodawać jsoncpp/json do swoich dodatków. Czy w swoich plikach C++ używasz względnej ścieżki? – drescherjm

+0

@drescherjm: w moim C++ używam tylko nagłówka "include" head.h "niezależnie od położenia nagłówka jest błędne? Dodawanie jsoncpp/json nie działa. – Amani

+0

Uważam, że chcesz przedrostkiem ścieżek dołączania $ { CMAKE_SOURCE_DIR} – drescherjm

Odpowiedz

16

Były dwa problemy. Najpierw musisz dodać ścieżkę jsoncpp/json do swoich katalogów dołączania. Wskazuje to jednak na drugi problem. Ponieważ twoje pliki wykonywalne nie w folderze źródłowym potrzebne do prefiks ${CMAKE_SOURCE_DIR} do ścieżek więc include_directories() powinna wyglądać następująco:

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

dodałam cytaty tylko z przyzwyczajenia. Robię to przez większość czasu z moim CMakeLists.txt, więc nie ma problemów ze spacjami w ścieżkach.

+0

Znalazłem tę odpowiedź za pomocą projektu ROS. Dla potencjalnych przyszłych gości potrzebowałem ' include_directories (include) ' – Jacksonkr

5

Amani,

Wydaje się, jeśli to "json.h" bez jego względnej ścieżki. Można też umieścić go w ten sposób:

#include "json/json.h" 

lub w pliku CMakeLists.txt, dodać katalog json do katalogów zawierających:

include_directories(jsoncpp jsoncpp/json jsonreader)