[英]cmake include header only library
我想將spdlog包含到我的項目之一中。 它是一個只有頭文件的庫。 我正在構建的項目正在使用 cmake。 目前我正在使用
include_directories('src/logger/spdlog/')
在 cmake 中並將庫包括為
#include <spdlog/spdlog.h>
在 logger 文件夾內的 logs.h 中。 我收到致命錯誤沒有這樣的文件或目錄。 在我的應用程序中包含相同庫的正確方法是什么。
你可能離開了一個目錄。 嘗試
include_directories("src/logger")
在CMakeLists.txt
,或
#include <spdlog.h>
在源代碼中。
Cmake 提供了專門用於“僅頭文件庫”的接口庫。 我建議執行以下操作:
third-party\spdlog\include
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)
target_link_libraries(${TARGET_PROJECT} LINK_PUBLIC ${TARGET_LOGGER})
將此目標鏈接到您的項目。 也不要忘記add_subdirectory(
third-party\spdlog
)
然后,在您的項目中,您可以使用#include "spdlog/spdlog.h"
來包含庫
首先,不要使用單引號'
而是雙引號"
或者如果它們不包含空格,則只使用純字符串。
我建議您使用find_path
而不是直接添加包含。 在那里你可以添加PATH_SUFFIXES
。 如果未找到標頭,您會在配置期間收到一條消息,這樣可以更輕松地發現錯誤。
文檔: https : //cmake.org/cmake/help/v3.6/command/find_path.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.