cmake включает в себя только библиотеку заголовков

Я хочу включить spdlog в один из моих проектов. Это библиотека только для заголовков. Проект, который я строю, использует cmake. В настоящее время я использую

include_directories('src/logger/spdlog/')

в Cmake и в том числе в библиотеке

#include <spdlog/spdlog.h>

в logs.h внутри папки логгера. Я получаю фатальную ошибку, нет такого файла или каталога. Как правильно включить ту же библиотеку в моем приложении.

3 ответа

Решение

Во-первых, не используйте одинарные кавычки ' но двойные кавычки " или просто строки, если они не содержат пробелов.

Я бы посоветовал вам использовать find_path вместо добавления включает напрямую. Там вы можете добавить PATH_SUFFIXES, Во время настройки вы получаете сообщение, если заголовок не найден, что облегчает обнаружение ошибок.
Документация: https://cmake.org/cmake/help/v3.6/command/find_path.html

Cmake предоставляет библиотеку интерфейса специально для «библиотеки только для заголовков». Я бы предложил сделать следующее:

  1. Создайте файловую структуру, подобную следующей
      third-party\spdlog\include
  1. Git клонирует репозиторий spdlog в includeкаталог с названием spdlog
  2. Создавать third-party\spdlog\CMakeLists.txtсо следующим содержанием
      find_package(Threads REQUIRED)
add_library(${TARGET_LOGGER} INTERFACE)
# add_library(spdlog::spdlog_header_only ALIAS ${TARGET_LOGGER})
target_include_directories(${TARGET_LOGGER} INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
                                                        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_link_libraries(${TARGET_LOGGER} INTERFACE Threads::Threads)
  1. Определите TARGET_LOGGER в CMakeLists.txt вашего проекта. Свяжите эту цель с вашим проектом с помощью target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER}). Также не забудьте
      add_subdirectory(
    third-party\spdlog
  )

Затем в своем проекте вы можете использовать #include "spdlog/spdlog.h"включить библиотеку

Вы, вероятно, не в одном каталоге. Попробуйте либо

 include_directories("src/logger")

в CMakeLists.txt, или же

 #include <spdlog.h>

в исходном коде.

Другие вопросы по тегам