只包含头文件库
cmake include header only library
我想将spdlog包含到我的一个项目中。它是一个头文件库。我正在建设的项目是使用cmake。目前我正在使用
include_directories('src/logger/spdlog/')
在cmake中并将库包含为
#include <spdlog/spdlog.h>
在logs.h内的记录器文件夹。我得到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么?
Cmake专门为"头文件专用库"提供了接口库。我建议这样做:
- 创建如下文件结构
third-partyspdloginclude
- Git将spdlog存储库克隆到
include
目录,名称为spdlog
- 创建
third-partyspdlogCMakeLists.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)
- 在项目的CMakeLists.txt中定义TARGET_LOGGER。使用
target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER})
将此目标链接到您的项目。也别忘了add_subdirectory(
third-partyspdlog
)
然后,在您的项目中,您可以使用#include "spdlog/spdlog.h"
来包含库
您可能不在一个目录中。试着
include_directories("src/logger")
CMakeLists.txt
中的,或
#include <spdlog.h>
首先,不要使用单引号'
,而是使用双引号"
,或者如果不包含空格,则使用纯字符串。
我建议您使用find_path
而不是直接添加包含。在那里你可以添加PATH_SUFFIXES
。如果在配置过程中没有找到标头,则会得到一条消息,这使得发现错误变得更容易。
文档:https://cmake.org/cmake/help/v3.6/command/find_path.html
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 如何为包含头文件的目标编写生成文件?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 在生成文件先决条件中包含头文件的原因
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 在 PostgreSQL C 扩展中包含头文件
- 是否可以在C++中以间接方式包含头文件
- 是否需要包含头文件?
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 我收到未声明的标识符错误,但我已包含头文件?
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序
- 如何在C++中包含头文件时错误地重载
- 我在C++中无效使用不完整的类型类错误,如何正确包含头文件?
- 虚幻引擎4.16,C++包含头文件
- C++多次包含头文件
- 令牌之前的预期类名 '{' - 包含头文件和 CPP 文件
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 有条件地将文件包含在C++标头中