簡體   English   中英

CMAKE:導入時鏈接OpenCV失敗

[英]CMAKE: Linking OpenCV fails when imported

我正在嘗試將OpenCV導入到我的CMakeLists.txt文件中。 這是我正在使用的代碼:

find_package(OpenCV 3 REQUIRED)
add_library(opencv SHARED IMPORTED)
set_target_properties(opencv PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "${OpenCV_INCLUDE_DIRS}"
  IMPORTED_LOCATION "${OpenCV_LIBS}")

稍后在cmake文件中,我創建一個鏈接到opencv的目標,如下所示:

add_executable(sample "src/sample.cpp")
target_link_libraries(sample opencv)

但是,這無法建立。 我碰巧正在使用Ninja,但Make也失敗了。

這是我嘗試使用Ninja進行構建時遇到的錯誤:

ninja: error: stat(opencv_viz;opencv_videostab;opencv_videoio;opencv_video;opencv_superres;opencv_stitching;opencv_shape;opencv_photo;opencv_objdetect;opencv_ml;opencv_imgproc;opencv_imgcodecs;opencv_highgui;opencv_flann;opencv_features2d;opencv_cudev;opencv_cudawarping;opencv_cudastereo;opencv_cudaoptflow;opencv_cudaobjdetect;opencv_cudalegacy;opencv_cudaimgproc;opencv_cudafilters;opencv_cudafeatures2d;opencv_cudacodec;opencv_cudabgsegm;opencv_cudaarithm;opencv_core;opencv_calib3d): File name too long

顯然,$ {OpenCV_LIBS}的值是一個值列表,該列表將作為一個長字符串傳遞,而不是作為單獨的arg拆分並鏈接到編譯器。

我已經驗證,如果IMPORTED_LOCATION是值列表(用分號分隔),而不是僅僅是到庫的單一路徑,其他庫也會失敗。

我究竟做錯了什么?

問題是共享的導入庫將尋找一個要鏈接的文件。

為了解決您的問題,我將改用接口庫並設置其依賴項:

find_package(OpenCV 3 REQUIRED)
add_library(opencv INTERFACE )
target_include_directories(opencv INTERFACE "${OpenCV_INCLUDE_DIRS}")
target_link_libraries(opencv INTERFACE "${OpenCV_LIBS}")

根據您的CMake版本,甚至可能不需要target_include_directories

oLen的答案會起作用,但是您將無法將庫標記為已導入。

完成我試圖設置INTERFACE_LINK_LIBRARIES屬性的一種更好的方法。 該庫也應該是一個INTERFACE庫,而不是SHARED。

因此,導入目標的cmake配置變為:

find_package(OpenCV 3 REQUIRED)
add_library(opencv INTERFACE IMPORTED)
set_target_properties(opencv PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "${OpenCV_INCLUDE_DIRS}"
  INTERFACE_LINK_LIBRARIES "${OpenCV_LIBS}")

暫無
暫無

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

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