CMake无法找到包含文件

时间:2013-03-16 13:38:56

标签: c++ makefile 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)

然后在构建目录中运行'cmake -G“MSYS Makefile”../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 个答案:

答案 0 :(得分:21)

有两个问题。首先,您需要将路径jsoncpp/json添加到include目录中。然而,这指出了第二个问题。由于您的可执行文件不在源文件夹中,因此您需要在${CMAKE_SOURCE_DIR}前加上您的路径,因此include_directories()应如下所示:

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

我只是出于习惯而添加引号。我大部分时间都使用CMakeLists.txt这样做,所以路径中的空格没有问题。

答案 1 :(得分:7)

阿马尼,

好像你包括" json.h"没有它的相对路径。您可以像这样包含它:

#include "json/json.h"

或者,在您的CMakeLists.txt文件中,将json目录添加到include目录中:

include_directories(jsoncpp jsoncpp/json jsonreader)