我对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项目的最佳解决方案是:
- 用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})