通过cmake链接openv库作为外部项目



我对cmake比较陌生,经过几天的努力,还是搞不懂下面的事情:

我有一个依赖于opencv(这是一个cmake项目本身)的项目,我想静态链接opencv库。我要做的是在我的项目中有一个opencv源代码的副本并通过

将其包含到我的CMakeLists.txt中
ExternalProject_Add(my_copy_of_opencv_project
   CMAKE_ARGS -D BUILD_SHARED_LIBS=NO ...
   CMAKE_INSTALL_PREFIX=${MY_OPENCV_INSTALL_DIR} 
   SOURCE_DIR ${PATH_TO_OPENCV_SRCS} 
)

所有构建得很好,我有问题的地方是我不能可靠地确定opencv库将在哪里。例如,在linux/mac上有${MY_OPENCV_INSTALL_DIR}/lib,命名为libopencv_core.a,而在安装了VS 2012的32位Windows上,库位于${MY_OPENCV_INSTALL_DIR}/lib/x86/vc11/staticlib,对于调试配置,库命名为opencv_core247d.lib

所以问题是我能否以某种方式获得由OpenCV构建(和根库文件夹)产生的所有库的列表,并通过target_link_libraries(mylib opencv_core ...)之类的东西链接它们?

也许我做错了什么或者太复杂了。所以我基本上想要的是静态编译我的嵌入式openv源代码树,并以"跨平台"的方式链接到它的库。

任何指示都是高度赞赏的!谢谢!

使用cmake与OpenCV项目的最佳解决方案是:

  1. 用OpenCV的cmake构建系统编译OpenCV作为共享/静态库。在你的项目的CMakeLists.txt

例如(CMakeLists.txt):

cmake_minimum_required(VERSION 2.8.12)
project(test_project)
# OpenCV_DIR could also be read from system environment variable.
if(WIN32)
  set(OpenCV_DIR "d:/libs/opencv-2.4.8/build")
else()
  set(OpenCV_DIR "/usr/lib/opencv")
endif()
find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui)
include_directories(${OpenCV_INCLUDE_DIRS}) # not needed for opencv>=4.0
add_executable(test main.cpp)
target_link_libraries(test ${OpenCV_LIBS})

相关内容

  • 没有找到相关文章

最新更新