2013-03-16 254 views
12

我有以下佈局的項目:CMake的不能找到包含文件

/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 

在/source/CMakeLists.txt我有這行代碼;

include_directories(jsoncpp jsonreader) 

但隨後在build目錄下運行 'cmake的-G 「MSYS的Makefile」 ../source' 生成Makefile文件,然後運行 ​​'使' 生成以下錯誤:

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 

我在做什麼錯了,我該如何解決這個問題?

+0

不應該將jsoncpp/json添加到您的包含中。或者在你的C++文件中你使用相對路徑嗎? – drescherjm 2013-03-16 13:41:54

+0

@drescherjm:在我的C++中,我只使用「include」header.h「,而不管頭部的位置是否是錯誤的?添加jsoncpp/json不起作用 – Amani 2013-03-16 13:46:13

+0

我相信你希望用include { CMAKE_SOURCE_DIR} – drescherjm 2013-03-16 14:04:37

回答

16

有兩個問題。首先,您需要將路徑jsoncpp/json添加到您的包含目錄中。但是,這指出了第二個問題。由於您的可執行文件不在源文件夾你需要前綴${CMAKE_SOURCE_DIR}到您的路徑,以便在include_directories()看起來應該像下面這樣:

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

我加了引號只是出於習慣。我大部分時間都在使用我的CMakeLists.txt,所以在路徑中沒有空間問題。

+0

我通過一個ROS項目找到了答案,對於潛在的未來訪問者, include_directories(包括)' – Jacksonkr 2016-11-08 19:46:19

5

阿曼尼,

看來,如果你有「json.h」沒有它的相對路徑。你可以將它包含這樣的:

#include "json/json.h" 

或者,在你的CMakeLists.txt文件,json的目錄添加到include目錄:

include_directories(jsoncpp jsoncpp/json jsonreader)