簡體   English   中英

C++ 在 Cmake 項目中包含庫

[英]C++ include library in Cmake project

我正在嘗試使用 CMake 將我下載的 C++ 庫集成到一個新項目中。

我下載了庫(“downloaded_library”),創建了build文件夾,並在其中運行cmake..make . 這些都成功運行,然后我導航到構建文件夾並運行 ./example 以運行庫附帶的示例文件。 這也很成功,所以我希望將它添加到另一個項目中。

我將此工作項目添加到以下目錄結構的“庫”文件夾中:

project
  -libraries
      -downloaded_library
          -build
          -include
              -downloaded_lib
                  -downloaded_lib.h
          -src
          -examples
              -example.cpp
          -CMakeLists.txt
  -src
      -main.cpp
  -build
  -CMakeLists.txt

我希望在main.cpp中運行在example.cpp中運行的相同代碼,但我一直無法讓導入工作。 我導航到構建文件夾和cmake..成功運行,但“make”失敗並出現導入錯誤(包含行上的致命錯誤,找不到 header 文件)。 這是有道理的,因為我沒想到相同的包含行可以工作(我將 example.cpp 復制並粘貼到 main.cpp),但我不知道該怎么做。

fatal error: downloaded_lib/downloaded_lib.h: No such file or directory
    1 | #include "downloaded_lib/downloaded_lib.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

在這種情況下,我的 CMakeLists.txt 應該包含什么,我的#include應該包含什么才能像在example.cpp中一樣使用main.cpp中的這個庫的內容?

編輯---為簡單起見,我更改了上面的 package 名稱,但“downloaded_library”的存儲庫如下: https://github.com/siposcsaba89/socketcan-cpp

我的頂級 CMakeLists.txt 如下所示:

# Minimum version of CMake required to build this project
cmake_minimum_required(VERSION 3.0)

# Name of the project
project(projectname)

# Add all the source files needed to build the executable
add_executable(${PROJECT_NAME} src/main.cpp)

add_subdirectory(libraries/downloaded_library)

# Link the executable and the library together
target_link_libraries(${PROJECT_NAME} downloaded_library)

為了從下載的庫中包含 header 文件,您可以將以下內容添加到CMakeLists.txt文件中:

find_library(downloaded_lib
             NAMES downloaded_lib
             HINTS "path to downloaded lib file")

if(NOT downloaded_lib)
  message(FATAL_ERROR "downloaded_lib not found!")
endif()

target_include_directories(${PROJECT_EXECUTABLE} PUBLIC "path to download_lib.h")
target_link_libraries(${PROJECT_EXECUTABLE} ${downloaded_lib})

除了庫文件之外,這還包括 header 文件所在的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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