tutorial how c++ makefile cmake

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.