首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spdlog头-仅与外部fmt。spdlog错误:“内部”:不是“fmt”的成员

spdlog头-仅与外部fmt。spdlog错误:“内部”:不是“fmt”的成员
EN

Stack Overflow用户
提问于 2020-07-09 06:06:48
回答 1查看 3.3K关注 0票数 0

我使用头只spdlog作为cmake的外部项目。

代码语言:javascript
复制
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,添加了以下内容。

代码语言:javascript
复制
add_subdirectory(fmt EXCLUDE_FROM_ALL)
...
target_link_libraries(myProject
        fmt::fmt
    )

它是在这种状态下执行的。但是,如果我添加以下代码以使用外部fmt,则会发生编译错误。

代码语言:javascript
复制
#define SPDLOG_FMT_EXTERNAL   // If I add this code I get an error.
#include <spdlog/spdlog.h>

错误消息如下所示。

代码语言:javascript
复制
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中找到了一个似乎与此相关的选项

代码语言:javascript
复制
option(SPDLOG_FMT_EXTERNAL "Use external fmt library instead of bundled" OFF)

我尝试使用以下方法将"SPDLOG_FMT_EXTERNAL“更改为"ON",但问题依然存在。我不知道这是否正确的方法和适当的解决办法。谢谢。

代码语言:javascript
复制
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 ""
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-10 04:08:22

这已在spdlog版本1.7:https://github.com/gabime/spdlog/releases/tag/v1.7.0中得到修正。

支持使用外部fmt版本7.x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62808478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档