次のレイアウトのプロジェクトがあります。
/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)
ただし、ビルドディレクトリで 'cmake -G "MSYS Makefiles" ../source'を実行するとMakefileが生成され、次に 'make'を実行すると次のエラーが生成されます。
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
私は何を間違っていますか、これをどのように解決できますか?
2つの問題がありました。最初に、パス_jsoncpp/json
_をインクルードディレクトリに追加する必要がありました。しかし、それは2番目の問題を示していました。実行可能ファイルがソースフォルダーにないため、include_directories()
が次のようになるように、パスの前に_${CMAKE_SOURCE_DIR}
_を付ける必要がありました。
_include_directories("${CMAKE_SOURCE_DIR}/jsoncpp"
"${CMAKE_SOURCE_DIR}/jsoncpp/json"
"${CMAKE_SOURCE_DIR}/jsonreader")
_
私は習慣から引用符を追加しました。私はほとんどの場合これを_CMakeLists.txt
_で行いますので、パス内のスペースに問題はありません。
アマニ、
相対パスなしで「json.h」をインクルードしているようです。次のように含めることができます。
#include "json/json.h"
または、CMakeLists.txtファイルで、jsonディレクトリをincludeディレクトリに追加します。
include_directories(jsoncpp jsoncpp/json jsonreader)