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?
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.
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)