CMake не может найти файлы include

У меня есть проект со следующим расположением:

   /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

что я делаю неправильно и как я могу это решить?

Ответ 1

Были две проблемы. Сначала вам нужно было добавить путь 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 поэтому нет проблем с пробелами в дорожках.

Ответ 2

Амани,

Кажется, что вы включили "json.h" без его относительного пути. Вы можете включить его так:

#include "json/json.h"

ИЛИ, в вашем файле CMakeLists.txt, добавьте каталог json в каталоги include:

include_directories(jsoncpp jsoncpp/json jsonreader)