28

次のレイアウトのプロジェクトがあります。

   /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

私は何を間違っていますか、どうすればこれを解決できますか?

4

2 に答える 2

34

2つの問題がありました。まずjsoncpp/json、インクルードされたディレクトリへのパスを追加する必要があります。ただし、そうすると2番目の問題が発生します。実行可能ファイルはソースフォルダにないため${CMAKE_SOURCE_DIR}、パスのプレフィックスを付ける必要がありinclude_directories()ます。次のようになります。

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

習慣から引用符を追加しました。私はほとんどの場合これを自分で行うCMakeLists.txtので、パスのスペースに問題はありません。

于 2013-03-17T00:58:21.393 に答える
10

アマニ、

相対パスなしで「json.h」を含めているようです。次のように含めることができます。

#include "json/json.h"

または、CMakeLists.txt ファイルで、json ディレクトリをインクルード ディレクトリに追加します。

include_directories(jsoncpp jsoncpp/json jsonreader)
于 2013-03-16T21:48:08.720 に答える