web-dev-qa-db-fra.com

CMake ne trouve pas les fichiers include

J'ai un projet avec la disposition suivante:

   /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

Dans /source/CMakeLists.txt j'ai cette ligne de code;

include_directories(jsoncpp jsonreader)

mais l'exécution de 'cmake -G "MSYS Makefiles" ../source' dans le répertoire de génération génère Makefile, puis l'exécution de 'make' génère l'erreur suivante:

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

qu'est-ce que je fais mal et comment puis-je résoudre ce problème?

18
Amani

Il y avait deux problèmes. Vous devez d'abord ajouter le chemin jsoncpp/json Aux répertoires your include. Cependant, cela indiquait un deuxième problème. Comme vos exécutables ne se trouvent pas dans le dossier source, vous devez préfixer ${CMAKE_SOURCE_DIR} À vos chemins afin que la include_directories() ressemble à ceci:

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

J'ai ajouté des citations juste par habitude. Je fais cela la plupart du temps avec mon CMakeLists.txt Donc il n'y a pas de problème avec les espaces dans les chemins.

22
drescherjm

Amani,

Il semble que vous incluiez "json.h" sans son chemin relatif. Vous pouvez soit l'inclure comme ceci:

#include "json/json.h"

OU, dans votre fichier CMakeLists.txt, ajoutez le répertoire json aux répertoires include:

include_directories(jsoncpp jsoncpp/json jsonreader)
7
Eran