c++ - how - CMake no puede encontrar archivos de inclusión
cmake win64 download (2)
Amani,
Parece como si incluyeras "json.h" sin su ruta relativa. Puedes incluirlo así:
#include "json/json.h"
O, en su archivo CMakeLists.txt, agregue el directorio json a los directorios de inclusión:
include_directories(jsoncpp jsoncpp/json jsonreader)
Tengo un proyecto con el siguiente diseño:
/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
En /source/CMakeLists.txt tengo esta línea de código;
include_directories(jsoncpp jsonreader)
pero luego ejecutando ''cmake -G "MSYS Makefiles" ../source'' en el directorio de compilación genera Makefile y luego ejecutando ''make'' genera el siguiente error:
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é estoy haciendo mal y cómo puedo resolver esto?
Había dos problemas. Primero necesitó agregar la ruta jsoncpp/json
a sus directorios de inclusión. Sin embargo eso apuntaba a un segundo problema. Ya que sus archivos ejecutables no se encontraban en la carpeta de origen, necesitaba el prefijo ${CMAKE_SOURCE_DIR}
a sus rutas, por lo que los include_directories()
deberían tener el siguiente aspecto:
include_directories("${CMAKE_SOURCE_DIR}/jsoncpp"
"${CMAKE_SOURCE_DIR}/jsoncpp/json"
"${CMAKE_SOURCE_DIR}/jsonreader")
Agregué citas solo por costumbre. Hago esto la mayor parte del tiempo con mi CMakeLists.txt
para que no haya problemas con los espacios en las rutas.