cmake 仅包含 header 个库
cmake include header only library
我想将 spdlog 包含到我的一个项目中。它是 header 唯一的图书馆。我正在构建的项目正在使用 cmake。目前我正在使用
include_directories('src/logger/spdlog/')
在 cmake 中并将库包含为
#include <spdlog/spdlog.h>
in logs.h inside logger 文件夹。我收到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么。
您可能离开了一个目录。试试
include_directories("src/logger")
在CMakeLists.txt
,或
#include <spdlog.h>
在源代码中。
首先,不要使用单引号 '
,而是使用双引号 "
或不包含空格的纯字符串。
我建议您使用 find_path
而不是直接添加包含。您可以在其中添加 PATH_SUFFIXES
。如果未找到 header,您会在配置期间收到一条消息,这样可以更轻松地发现错误。
文档:https://cmake.org/cmake/help/v3.6/command/find_path.html
Cmake 专门为“header-only library”提供接口库。我建议执行以下操作:
- 创建如下文件结构
third-party\spdlog\include
- Git 将 spdlog 存储库克隆到名称为
spdlog
的 include
目录中
- 使用以下内容创建
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)
- 在项目的 CMakeLists.txt 中定义 TARGET_LOGGER。 Link 这个目标到你的项目
target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER})
。也别忘了
add_subdirectory(
third-party\spdlog
)
然后,在你的项目中,你可以使用#include "spdlog/spdlog.h"
来包含库
我想将 spdlog 包含到我的一个项目中。它是 header 唯一的图书馆。我正在构建的项目正在使用 cmake。目前我正在使用
include_directories('src/logger/spdlog/')
在 cmake 中并将库包含为
#include <spdlog/spdlog.h>
in logs.h inside logger 文件夹。我收到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么。
您可能离开了一个目录。试试
include_directories("src/logger")
在CMakeLists.txt
,或
#include <spdlog.h>
在源代码中。
首先,不要使用单引号 '
,而是使用双引号 "
或不包含空格的纯字符串。
我建议您使用 find_path
而不是直接添加包含。您可以在其中添加 PATH_SUFFIXES
。如果未找到 header,您会在配置期间收到一条消息,这样可以更轻松地发现错误。
文档:https://cmake.org/cmake/help/v3.6/command/find_path.html
Cmake 专门为“header-only library”提供接口库。我建议执行以下操作:
- 创建如下文件结构
third-party\spdlog\include
- Git 将 spdlog 存储库克隆到名称为
spdlog
的 - 使用以下内容创建
third-party\spdlog\CMakeLists.txt
include
目录中
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。 Link 这个目标到你的项目
target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER})
。也别忘了
add_subdirectory(
third-party\spdlog
)
然后,在你的项目中,你可以使用#include "spdlog/spdlog.h"
来包含库