我想将spdlog包含到我的项目之一中。它是一个只有标头的库。我正在构建的项目正在使用 cmake。目前我正在使用
include_directories('src/logger/spdlog/')
Run Code Online (Sandbox Code Playgroud)
在 cmake 中并将库包含为
#include <spdlog/spdlog.h>
Run Code Online (Sandbox Code Playgroud)
在记录器文件夹内的logs.h中。我收到致命错误,没有这样的文件或目录。在我的应用程序中包含相同库的正确方法是什么?
小智 8
Cmake专门为“仅头文件库”提供了接口库。我建议执行以下操作:
third-party\spdlog\include
Run Code Online (Sandbox Code Playgroud)
include具有名称的目录中spdlogthird-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)
Run Code Online (Sandbox Code Playgroud)
target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER})。也不要忘记add_subdirectory(
third-party\spdlog
)
Run Code Online (Sandbox Code Playgroud)
然后,在您的项目中,您可以使用#include "spdlog/spdlog.h"包含该库
您可能离开了一个目录。尝试一下
include_directories("src/logger")
Run Code Online (Sandbox Code Playgroud)
在CMakeLists.txt, 或
#include <spdlog.h>
Run Code Online (Sandbox Code Playgroud)
在源代码中。
首先,不要使用单引号'而是使用双引号",或者如果不包含空格,则仅使用纯字符串。
我建议您使用find_path而不是直接添加包含。您可以在那里添加PATH_SUFFIXES. 如果未找到标头,您会在配置过程中收到一条消息,这使得更容易发现错误。
文档:https://cmake.org/cmake/help/v3.6/command/find_path.html