Я использую spdlog только для заголовков в качестве внешнего проекта cmake.
find_program(GIT_EXECUTABLE git)
ExternalProject_Add(
spdlog
PREFIX ${CMAKE_BINARY_DIR}/vendor/spdlog
GIT_REPOSITORY "https://github.com/gabime/spdlog.git"
GIT_TAG "v1.6.1"
TIMEOUT 10
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
UPDATE_COMMAND ""
)
Чтобы связать внешнюю библиотеку fmt с spdlog, было добавлено следующее:
add_subdirectory(fmt EXCLUDE_FROM_ALL)
...
target_link_libraries(myProject
fmt::fmt
)
Он выполняется в этом состоянии. но если я добавлю следующий код для использования внешнего fmt, произойдет ошибка компиляции.
#define SPDLOG_FMT_EXTERNAL // If I add this code I get an error.
#include <spdlog/spdlog.h>
Сообщение об ошибке выглядит следующим образом.
myproject\build\x64-Debug\vendor\spdlog\src\spdlog\include\spdlog\details\fmt_helper.h(40): error C2039: 'internal': is not a member of 'fmt'
Я думаю, что spdlog необходимо установить для используйте внешний FMT, а не бандл, но я этого не делаю. Когда я устанавливаю spdlog с помощью «ExternalProject_Add», я думаю, что мне нужно сделать что-то дополнительное, но я не знаю, что это такое.
Я нашел в spdlog / CMakeLists вариант, который, кажется, связан с этим. txt
option(SPDLOG_FMT_EXTERNAL "Use external fmt library instead of bundled" OFF)
Я попробовал следующий метод изменить "SPDLOG_FMT_EXTERNAL" на "ON", но проблема осталась той же. Я не уверен, что это правильный путь и подходящее решение. спасибо.
ExternalProject_Add(
spdlog
PREFIX ${CMAKE_BINARY_DIR}/vendor/spdlog
GIT_REPOSITORY "https://github.com/gabime/spdlog.git"
GIT_TAG "v1.6.1"
TIMEOUT 10
CONFIGURE_COMMAND ""
CMAKE_ARGS "-DSPDLOG_FMT_EXTERNAL=ON -DDSPDLOG_FMT_EXTERNAL:string=ON"
BUILD_COMMAND ""
INSTALL_COMMAND ""
UPDATE_COMMAND ""
)