cmake — ошибка компиляции C ++ SPDLOG: переменная или поле «set_error_handler» объявлены недействительными

Я пытаюсь использовать spdlog в моем проекте. В соответствии с документ spdlog, Мне просто нужно скопировать файлы в папку include и использовать компилятор C ++ 11.

Я скопировал папку / include / spdlog в корневую папку своего проекта, но у меня возникло много ошибок после попытки сборки проекта. Некоторые из них:

/home/project/Documents/project-server/spdlog/spdlog.h:46:39: error: variable or field ‘set_error_handler’ declared void
void set_error_handler(log_err_handler);
^
/home/project/Documents/project-server/spdlog/spdlog.h:46:24: error: ‘log_err_handler’ was not declared in this scope
void set_error_handler(log_err_handler);
^
In file included from /home/project/Documents/project-server/main.cpp:13:0:
/home/project/Documents/project-server/spdlog/spdlog.h:74:79: error: ‘filename_t’ does not name a type
std::shared_ptr<logger> basic_logger_mt(const std::string& logger_name, const filename_t& filename, bool truncate = false);
^
/home/project/Documents/project-server/spdlog/spdlog.h:75:79: error: ‘filename_t’ does not name a type
std::shared_ptr<logger> basic_logger_st(const std::string& logger_name, const filename_t& filename, bool truncate = false);
^
/home/project/Documents/project-server/spdlog/spdlog.h:80:82: error: ‘filename_t’ does not name a type
std::shared_ptr<logger> rotating_logger_mt(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files);

Я попытался добавить следующее в CMakeLists.txt

target_include_directories(ProjectName INTERFACE spdlog)

include_directories(spdlog)

target_link_libraries(ProjectName .... -libspdlog-dev)

(Я установил libspdlog-dev)

add_subdirectory(spdlog)

но ничего из вышеперечисленного не работает. Кто-нибудь знает, как я могу это исправить? Большое спасибо!

0

Решение

Как написано в spdlogs document в самом низу, ты можешь сделать

find_package(spdlog CONFIG)

Это предоставляет вам импортированную интерфейсную библиотеку spdlog::spdlog, который вы можете использовать

target_link_library(my_library PUBLIC spdlog::spdlog)

(как видно из spdlog / примеры / CMakeLists.txt)

1

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

Решением было установить spdlog:

sudo apt-get install libspdlog-dev

и включают использование:

#include <spglog/spdlog.h>

Сначала я просто скопировал spdlog в корень проекта и пытался включить с помощью:

#include "spdlog/spdlog.h"
0

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