我对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源代码树,并在"交叉平台"中链接其库。方式。
任何指针都非常感谢!谢谢!
答案 0 :(得分:15)
在OpenCV项目中使用cmake的最佳解决方案是:
例如(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})
它适用于跨平台。