首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake仅包含标题库

cmake仅包含标题库
EN

Stack Overflow用户
提问于 2016-07-02 19:09:26
回答 3查看 10.6K关注 0票数 4

我想在我的一个项目中包含spdlog。它是一个仅包含头文件的库。我正在构建的项目正在使用cmake。目前我正在使用

代码语言:javascript
复制
include_directories('src/logger/spdlog/')

在cmake中,并将该库包含为

代码语言:javascript
复制
#include <spdlog/spdlog.h>

在记录器文件夹内的logs.h中。我得到致命的错误,没有这样的文件或目录。在我的应用程序中包含相同的库的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-03 16:39:05

首先,不要使用单引号',而要使用双引号",如果不包含空格,则只使用普通字符串。

我建议您使用find_path而不是直接添加includes。您可以在其中添加PATH_SUFFIXES。在配置过程中,如果没有找到头,您会收到一条消息,这样可以更容易地发现错误。

文档:https://cmake.org/cmake/help/v3.6/command/find_path.html

票数 1
EN

Stack Overflow用户

发布于 2016-07-02 19:12:17

您可能离开了一个目录。试一试

代码语言:javascript
复制
 include_directories("src/logger")

CMakeLists.txt中,或者

代码语言:javascript
复制
 #include <spdlog.h>

在源代码中。

票数 4
EN

Stack Overflow用户

发布于 2021-01-04 07:35:47

Cmake提供了专门针对header-only库的接口库。我建议做以下几件事:

  1. 创建与以下

类似的文件结构

代码语言:javascript
复制
third-party\spdlog\include

  1. Git将spdlog存储库克隆到名为spdlog
  2. Create third-party\spdlog\CMakeLists.txtinclude目录中,并包含以下content

代码语言:javascript
复制
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})将此目标链接到您的项目。也别忘了

代码语言:javascript
复制
add_subdirectory(
    third-party\spdlog
  )

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

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

https://stackoverflow.com/questions/38159466

复制
相关文章

相似问题

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