2013-03-16 47 views
12

Tôi có một dự án với cách bố trí như sau:CMake không thể tìm thấy bao gồm các 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 

Trong /source/CMakeLists.txt tôi có dòng mã này;

include_directories(jsoncpp jsonreader) 

nhưng sau đó chạy 'cmake -G "MSYS Makefiles" ../source' trong xây dựng thư mục tạo ra Makefile và sau đó chạy 'make' tạo ra các lỗi sau:

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 

những gì tôi đang làm sai và làm thế nào tôi có thể giải quyết điều này?

+0

Bạn không nên thêm jsoncpp/json vào bao gồm của mình. Hoặc trong các tệp C++ của bạn, bạn có sử dụng một đường dẫn tương đối không? – drescherjm

+0

@drescherjm: trong C++ của tôi, tôi chỉ sử dụng "include" header.h "bất kể vị trí của tiêu đề là sai? Thêm jsoncpp/json không hoạt động. – Amani

+0

Tôi tin rằng bạn muốn thêm tiền tố cho các đường dẫn bao gồm của bạn với $ { CMAKE_SOURCE_DIR} – drescherjm

Trả lời

16

Có hai vấn đề. Trước tiên, bạn cần thêm đường dẫn jsoncpp/json vào thư mục bao gồm của bạn. Tuy nhiên điều đó chỉ ra một vấn đề thứ hai. Kể từ khi thực thi của bạn không nằm trong thư mục nguồn mà bạn cần phải thêm tiền tố ${CMAKE_SOURCE_DIR} đến đường dẫn của bạn để include_directories() nên trông giống như sau:

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

tôi đã thêm dấu ngoặc kép chỉ theo thói quen. Tôi làm điều này hầu hết thời gian với CMakeLists.txt của tôi vì vậy không có vấn đề với không gian trong đường dẫn.

+0

Tôi đã tìm thấy câu trả lời này bằng một dự án ROS. include_directories (bao gồm) ' – Jacksonkr

5

Amani,

Có vẻ như bạn bao gồm "json.h" không có đường dẫn tương đối. Bạn có thể có thể bao gồm nó như thế này:

#include "json/json.h" 

OR, trong tập tin CMakeLists.txt của bạn, thêm thư mục json để các thư mục bao gồm:

include_directories(jsoncpp jsoncpp/json jsonreader) 
Các vấn đề liên quan