#c #cmake
#c #cmake
Вопрос:
Кажется, я не могу правильно включить стороннюю библиотеку nlohman_json в свой проект на C . Ниже приведена моя попытка настройки CMake. Однако, когда я приступаю к построению, строка в верхней части моего parser.cpp который пытается включить #include «nlohmann/json.hpp», терпит неудачу, он говорит, что файл не может быть найден.
В CMakeLists.txt находится в корне папки проекта. Тогда есть src/engine/parser.cpp и включает в себя/nlohmann/json.hpp
cmake_minimum_required(VERSION 3.10)
project(textadv)
set(JSON_BuildTests OFF CACHE INTERNAL "")
add_subdirectory(includes/nlohmann ${CMAKE_CURRENT_BINARY_DIR}/nlohmann_json)
add_executable(textadvexec src/engine/parser.cpp)
target_include_directories(textadvexec PRIVATE ${CMAKE_CURRENT_SOURCE_DIRECTORY}/includes)
set_target_properties(textadvexec PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(textadvexec PRIVATE nlohmann_json)
Комментарии:
1. Что у вас есть в
includes/nlohmann
каталоге? Я бы предположил, что у вас есть github.com/nlohmann/json проект здесь, так что вы включаете его вadd_subdirectory
себя. Но вы пишете, что у вас естьincludes/nlohmann/json.hpp
file, и это противоречит моему предположению:nlohmann_json
проект не имеетjson.hpp
в своем корневом каталоге.2. Если вы посмотрите в выпусках для этого проекта, кажется, что вы должны использовать только этот единственный файл .hpp.
3. Да, вы можете просто загрузить
json.hpp
, поместить ее в подкаталогnlohmann
и настроить включаемые каталоги, чтобы#include <nlohmann/json.hpp>
они работали. Включаемые каталоги настраиваются сinclude_directories
target_include_directories
помощью команд или. Ноadd_subdirecrtory
команда, которую вы используете, делает совершенно разные вещи. Если вы хотите ее использовать, см. «Встроенный» вариант в их документации .4. Я попытался закомментировать add_subdirectory, но никаких изменений не произошло. Учитывая мою структуру папок, я бы предположил, что именно так
target_include_directories
и должно быть использовано.5. Пожалуйста, обновите свой вопросительный пост со структурой файлов в вашем проекте. Среди прочего, эта структура должна отражать содержимое
includes
подкаталога… ИCMAKE_CURRENT_SOURCE_DIRECTORY
является неправильным именем для переменной, которая содержит текущий каталог. Правильное имя — CMAKE_CURRENT_SOURCE_DIR .