簡體   English   中英

cmake 只包含頭文件庫

[英]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 提供了專門用於“僅頭文件庫”的接口庫。 我建議執行以下操作:

  1. 創建如下文件結構
third-party\spdlog\include
  1. Git 將 spdlog 存儲庫克隆到名為spdloginclude目錄中
  2. 使用以下內容創建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)
  1. 在項目的 CMakeLists.txt 中定義 TARGET_LOGGER。 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM