首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMAKE:导入时链接OpenCV失败

CMAKE:导入时链接OpenCV失败
EN

Stack Overflow用户
提问于 2017-02-11 10:04:45
回答 2查看 1.6K关注 0票数 0

我正在尝试将OpenCV导入到CMakeLists.txt文件中。下面是我使用的代码:

代码语言:javascript
复制
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的目标,如下所示:

代码语言:javascript
复制
add_executable(sample "src/sample.cpp")
target_link_libraries(sample opencv)

然而,这并没有建立。我碰巧在用忍者,但它也用不了Make。

下面是我尝试使用忍者构建时所遇到的错误:

代码语言:javascript
复制
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}的值是一个值列表,该列表被作为一个长字符串传递,而不是作为单独的args被拆分并链接到编译器。

我已经验证过,如果IMPORTED_LOCATION是一个值列表(用分号分隔),而不是仅仅作为一个库的单一路径,那么其他库也会失败。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-18 21:23:48

oLen的答案将有效,但随后您将失去将库标记为导入库的能力。

一种更好的方法来完成我试图做的设置INTERFACE_LINK_LIBRARIES属性的工作。库还应该是接口库,而不是共享库。

因此,导入目标的cmake配置变成:

代码语言:javascript
复制
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}")
票数 1
EN

Stack Overflow用户

发布于 2017-02-11 13:16:35

问题是共享导入库将查找一个可链接的文件。

为了解决您的问题,我将使用接口库,并设置它的依赖关系:

代码语言:javascript
复制
find_package(OpenCV 3 REQUIRED)
add_library(opencv INTERFACE )
target_include_directories(opencv INTERFACE "${OpenCV_INCLUDE_DIRS}")
target_link_libraries(opencv INTERFACE "${OpenCV_LIBS}")

根据您的target_include_directories版本,甚至可能没有必要使用CMake。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42174606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档