[英]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.