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

时间:2014-03-23 22:51:06

标签: c++ opencv cmake static-linking

我对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上,libs在${MY_OPENCV_INSTALL_DIR}/lib/x86/vc11/staticlib中,而在Debug配置中,libs命名为{{ {1}}。

所以问题是我可以以某种方式获取OpenCV构建(以及根lib文件夹)生成的所有库的列表,并通过opencv_core247d.lib之类的东西链接它们吗?

也许我做错了什么或过于复杂。所以我基本上想要的是静态编译我的嵌入式opencv源代码树,并在"交叉平台"中链接其库。方式。

任何指针都非常感谢!谢谢!

1 个答案:

答案 0 :(得分:15)

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

  1. 使用OpenCV的cmake构建系统将OpenCV编译为共享/静态库。
  2. 在您的项目的CMakeLists.txt
  3. 例如(CMakeLists.txt):

    project(test_project)
    
    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})
    add_executable(test main.cpp)
    target_link_libraries(test ${OpenCV_LIBS})
    

    它适用于跨平台。