spdlog header-only with external fmt. spdlog error: 'internal': is not a member of 'fmt'
spdlog header-only with external fmt. spdlog error: 'internal': is not a member of 'fmt'
我正在使用 header-only 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 ""
)
为了 link 到 spdlog 的外部 fmt 库,添加了以下内容。
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,而不是捆绑包,但我没有这样做。
当我用“ExternalProject_Add”安装 spdlog 时,我想我需要做一些额外的事情,但我不知道它是什么。
我在 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 ""
)
这已在 spdlog 1.7 版中修复:https://github.com/gabime/spdlog/releases/tag/v1.7.0:
Support for using external fmt version 7.x
我正在使用 header-only 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 ""
)
为了 link 到 spdlog 的外部 fmt 库,添加了以下内容。
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,而不是捆绑包,但我没有这样做。 当我用“ExternalProject_Add”安装 spdlog 时,我想我需要做一些额外的事情,但我不知道它是什么。
我在 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 ""
)
这已在 spdlog 1.7 版中修复:https://github.com/gabime/spdlog/releases/tag/v1.7.0:
Support for using external fmt version 7.x