[英]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();
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)
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_directories
和compile_definitions
,以便庫的所有用戶自動定義它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.