cmake包括仅头文件库

时间:2016-07-02 11:09:26

标签: c++ cmake spdlog

我想将spdlog包含在我的某个项目中。它只是一个标题库。我正在构建的项目正在使用cmake。目前我正在使用

include_directories('src/logger/spdlog/')

在cmake中并将库包含为

#include <spdlog/spdlog.h>

在logs.h里面的logger文件夹中。我正在致命错误没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么。

3 个答案:

答案 0 :(得分:4)

您可能不在一个目录中。尝试

 include_directories("src/logger")
<{1>}或

中的

CMakeLists.txt

在源代码中。

答案 1 :(得分:3)

Cmake 提供了专门用于“仅头文件库”的接口库。我建议执行以下操作:

  1. 创建如下文件结构
third-party\spdlog\include
  1. Git 将 spdlog 存储库克隆到名为 includespdlog 目录
  2. 使用以下内容创建third-party\spdlog\CMakeLists.txt
find_package(Threads REQUIRED)
add_library(${TARGET_LOGGER} INTERFACE)
# add_library(spdlog::spdlog_header_only ALIAS ${TARGET_LOGGER})
target_include_directories(${TARGET_LOGGER} INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
                                                        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_link_libraries(${TARGET_LOGGER} INTERFACE Threads::Threads)
  1. 在项目的 CMakeLists.txt 中定义 TARGET_LOGGER。使用 target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER}) 将此目标链接到您的项目。还有别忘了
add_subdirectory(
    third-party\spdlog
  )

然后,在您的项目中,您可以使用 #include "spdlog/spdlog.h" 来包含库

答案 2 :(得分:1)

首先,不要使用单引号',而应使用双引号"或仅使用纯字符串(如果它们不包含空格)。

我建议你使用find_path而不是直接添加包含。在那里你可以添加PATH_SUFFIXES。如果找不到标题,您会在配置期间收到消息,这样可以更容易地发现错误 文档:https://cmake.org/cmake/help/v3.6/command/find_path.html