spdlog.h не найден в проекте CMake

Я пытаюсь интегрировать spdlog, библиотеку журналов только для заголовков, в проект C ++, но у меня возникают проблемы с тем, чтобы CMake правильно распознал пути включения. Я использую последний CLion с CMake 3.10.2 на Ubuntu 18.04.

Моя структура проекта выглядит так:

Project Dir
|- libs
| |- spdlog #this is the include directory taken straight from GitHub
|
|- src
| |-...
|- CMakeLists.txt

в CMakeLists.txt Файл, который я определяю, включает каталог:
include_directories("libs/")

Теперь, когда я пытаюсь написать #include <spdlog/spdlog.h> в заголовочном файле, расположенном в src/ CLion жалуется, что не может найти spdlog.h хотя я проверил и файл определенно находится в spdlog папка. Использование кавычек вместо угловых скобок в операторе включения не решает проблему, однако использование пути относительно файла (например, ../libs/spdlog/spdlog.h) работает как надо. Что меня больше смущает, так это то, что в исходном файле, соответствующем заголовку, я могу включить файл без проблем.

Мне нигде не удалось найти ничего похожего на эту проблему, и я изо всех сил пытаюсь понять, что заставляет CMake или CLion вести себя так.

РЕДАКТИРОВАТЬ: В соответствии с предложением Матье Брухера я пытался использовать полные пути к папке включения, но она все еще не работает. Кажется, проблема в том, что папки не распознаются в заголовках, так как они работают в исходных файлах.

EDIT2: вот весь CMakeLists.txt Я использую. Он вложен в другой каталог, чем верхний уровень CMakeLists.txt для всего проекта, так как это было единственное решение, которое я нашел в Интернете, чтобы получить что-то похожее на несколько проектов VS в решении на CLion. Однако, поскольку все пути относительно, я не думаю, что это будет проблемой. Я также знаю, что spdlog — это библиотека C ++ 11, но в ближайшем будущем мне понадобятся некоторые функции C ++ 14.

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

project(TokenEngine VERSION 0.0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES src/Application.cpp src/Application.hpp src/EntryPoint.hpp src/Logger.cpp src/Logger.hpp)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/")
add_library(TokenEngine SHARED ${SOURCE_FILES})

#Expose the public API of the engine to any project that might use it
target_include_directories(TokenEngine PUBLIC include)

РЕДАКТИРОВАТЬ 3: Когда я попытался воссоздать ошибку, чтобы показать полное сообщение, заданное каким-то образом, оно ушло, заменив его другим, совершенно не связанным с CMake …

0

Решение

Вы можете использовать полные пути:

include_directories(${CMAKE_SOURCE_DIR}/libs/)
0

Другие решения

Вы также должны добавить папку для включения в пути для включения, чтобы иметь возможность включить через #include <spdlog/spdlog.h>, Это должно выглядеть так

include_directories(${CMAKE_SOURCE_DIR}/libs)

Но я предпочитаю использовать

target_include_directories(yourTarget PUBLIC ${CMAKE_SOURCE_DIR}/libs)

где yourTarget является целью, где вы хотите использовать spdlog. Например, у вас также будут доступны каталоги включения, если вы собираетесь связать свой yourTarget к чему-то еще. Если вам нужен spdlog только в yourTargetSCP файлы, которые вы можете изменить PUBLIC в PRIVATE, Увидеть cmake doc.

0

По вопросам рекламы [email protected]