【问题标题】:error while trying to link spdlog static lib with cmake尝试将 spdlog 静态库与 cmake 链接时出错
【发布时间】:2021-08-25 17:16:36
【问题描述】:

我使用 doc 安装了 spdlog 静态库,并尝试使用 example 将它链接到我的程序 安装路径是这样的: /home/yaodav/Desktop/dnr_main_repo/lib/external

这是我的 CMAKE:

cmake_minimum_required(VERSION 3.19)
project(test_1)

set(CMAKE_CXX_STANDARD 17)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost 1.75.0 COMPONENTS date_time system thread CONFIG)
if(Boost_FOUND)
    message("Boost found ${Boost_VERSION}")
    message("${Boost_LIBRARIES}")
endif()
find_library(CONNECTION
        NAMES connlib
        )
if(NOT CONNECTION)
    message(FATAL_ERROR "CONNECTION library not found")
else()
    message("CONNECTION library found")
endif()

if(NOT TARGET spdlog)
    # Stand-alone build
    find_package(spdlog REQUIRED)
endif()


find_package(Threads)

add_executable(test_1 main.cpp)
target_link_libraries(test_1 PRIVATE ${CONNECTION} ${Boost_LIBRARIES} Threads::Threads pq spdlog::spdlog)

但我收到此错误:

CMakeLists.txt:23 (find_package) 处的 CMake 错误:不提供 CMAKE_MODULE_PATH 中的“Findspdlog.cmake”此项目已询问 CMake 找到“spdlog”提供的包配置文件,但是CMake 没找到。

找不到“spdlog”提供的包配置文件 具有以下任何名称:

spdlogConfig.cmake
spdlog-config.cmake

将“spdlog”的安装前缀添加到CMAKE_PREFIX_PATH或设置 “spdlog_DIR”到包含上述文件之一的目录。如果 “spdlog”提供单独的开发包或SDK,请务必 已安装。

所以我添加了spdlog_DIR set(spdlog_DIR ../lib/external/spdlog find_package(spdlog PATHS ${spdlog_DIR } REQUIRED) 出现此错误:

include could not find load file:

    /home/yaodav/Desktop/dnr_main_repo/lib/external/spdlog/build/spdlogConfigTargets.cmake

【问题讨论】:

  • /home/yaodav/Desktop/dnr_main_repo/lib/external/spdlog/build/spdlogConfigTargets.cmake 存在吗?
  • @StephenNewell 不,它更远 /home/yaodav/Desktop/dnr_main_repo/lib/external/spdlog/build/CMakeFiles/Export/lib64/cmake/spdlog/spdlogConfigTargets.cmake 但是当我将 spdlog_DIR 更改为它时,它告诉我我需要到 spdlogConfig.cmake 的路径
  • "我使用那里的 doc 安装了 spdlog 静态库" - 有趣,但 Install section 没有 安装 spdlog,它只是 构建 它.对于安装,您需要另外运行make install。确保选择适当的安装前缀(运行 cmake 时为 CMAKE_INSTALL_PREFIX)。
  • @Tsyvarev 如果我想使用它,我必须安装它吗?
  • 在他们的CMakeLists.txt 中,我没有看到export() 调用,因此如果不安装软件包,您将无法使用find_package 来定位它。请注意,“安装”并不意味着“安装到系统目录”。正如我上面所说,通过使用CMAKE_INSTALL_PREFIX,您可以选择安装包的目录。

标签: cmake spdlog


【解决方案1】:

我发现使用带有 spdlog 的 FetchContent 也是最简单的。刚刚将这些行添加到我的项目中:

...
Include(FetchContent)
FetchContent_Declare(
    spdlog
    GIT_REPOSITORY https://github.com/gabime/spdlog.git
    GIT_TAG v1.9.2
)
FetchContent_MakeAvailable(spdlog)
add_executable(project main.cpp)
target_link_libraries(project PRIVATE spdlog::spdlog)
...

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多