spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
spdlog header-only with external fmt. spdlog error: 'internal': is not a member of 'fmt'
我正在使用仅头部的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>
错误消息如下。
myprojectbuildx64-Debugvendorspdlogsrcspdlogincludespdlogdetailsfmt_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 ""
)
此问题已在spdlog版本1.7中修复:https://github.com/gabime/spdlog/releases/tag/v1.7.0:
支持使用外部fmt版本7.x
相关文章:
- 用C++20 fmt限制结果的总大小
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 创建 Spdlog 异步文件记录器时遇到困难
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 通过复制包含目录的内容来安装 spdlog
- fmt 与 Howard Hinnant 的日期:为什么从 fmt::to_string "{}"?FMT 和日期的最佳实践?
- 无法从 spdlog 中格式化参数
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 我不能在 c++ 上使用 fmt 库标头
- <int> 使用 fmt 库将向量转换为字符串
- 扩展自定义类型的spdlog
- C++fmt库,只使用格式说明符格式化单个参数
- 使用{fmt}库打印
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 如何转义 spdlog 消息?
- 如何在代码中启用/禁用 spdlog 日志记录?
- 为什么 {fmt} 比 std::stringstream 慢?
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能