簡體   English   中英

在 CMake 中使用第 3 方共享 Object 庫和 header 文件

[英]Using 3rd Party Shared Object Library and header files in CMake

我正在嘗試使用此 ZED Open Capture 庫將 ZED Mini 相機用於我在 RaspberryPi 上的項目。 我成功安裝了庫,共享的 object 文件位於/usr/local/lib/libzed_open_capture.so並且包含頭文件位於/usr/local/include/zed-open-capture/位置。 為了包含這個庫,我將以下行添加到我的 CMakeLists.txt

find_library(ZED_LIB zed_open_capture) 

include_directories("/usr/local/include/zed-open-capture/")

add_executable(zed_pub src/zed_pub.cpp)

target_link_libraries(zed_pub ${ZED_LIB})

現在,當我使用此代碼時,它顯示此錯誤"'sl_oc::video' has not been declared

#include "videocapture.hpp" //Library Header File
sl_oc::video::VideoCapture cap;
cap.initializeVideo();
const sl_oc::video::Frame frame = cap.getLastFrame();
  • 有人可以解釋一下如何在 CMake 中使用共享的 Object 庫文件和 header 文件嗎? 該庫已經使用 CMake build 和sudo make install在我的 Linux 系統上安裝。

該庫的 github 存儲庫位於https://github.com/stereolabs/zed-open-capture

我也找不到 Find_PKG_name.cmake 所以我不能使用 find_package() 選項。

根據 ZED Open Capture 的CMakeLists.txt

...
# Install rules
set_target_properties(${PROJECT_NAME} PROPERTIES
    PUBLIC_HEADER "${HDR_FULL}"
)
install(TARGETS ${PROJECT_NAME}
    LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/include/zed-open-capture)

參考: https://github.com/stereolabs/zed-open-capture/blob/dfa0aee51ccd2297782230a05ca59e697df496b2/CMakeLists.txt#L142-L148

ZED Open Capture 似乎沒有提供任何“CMake config”文件......

因此,您必須創建自己的FindZED.cmake模塊和/或改進此項目的 CMakeLists.txt...

videocapture.hpp將您需要的定義包裝在#ifdef VIDEO_MOD_AVAILABLE中。 這似乎沒有定義。 ZED package 中的根 CMakeLists.txt 默認 BUILD_VIDEO 為 ON,因此這可能都是為 package 構建定義的。 但正如其他人指出的那樣,package 不會在安裝的任何地方保留此信息。 package 的“正確”方法是在安裝時配置/修改包含文件以考慮構建配置,可能是通過生成具有適當定義的“config.hpp”文件。 或者在安裝中包含一個zed-config.cmake文件,其中包含所有必要的導入和定義。

您的短路解決方案應該沒問題。 只需添加target_compile_definitions(zed_pub PUBLIC VIDEO_MOD_AVAILABLE) 如果你想為將來做的更干凈,為 zed_lib 創建一個 IMPORTED 目標,並在該目標上設置include_directoriescompile_definitions ,以便庫的所有用戶自動定義它。

暫無
暫無

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

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