Windows下CMAKE编译OpenCV带版本后缀,CMAKE项目引用问题咨询
我之前在Windows系统下用CMake从源码编译OpenCV,结果生成的库文件都带着版本后缀,比如opencv_dnn341.lib(其中341对应OpenCV 3.4.1版本)。最近在另一个CMake项目里引用这些库时遇到了困扰,当前的配置代码片段如下:
# cmake/opencv/CMakeLists.txt FIND_PACKAGE(OpenCV REQUIRED) SET(OpenCV_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS} CACHE INTERNAL "OpenCV include dirs" ) SET(OpenCV_LIBS ${OpenCV_LIBS} CACHE INTERNAL "OpenCV libraries" )
下面分享几个实用的解决方法:
明确指定OpenCV版本,让CMake自动匹配后缀
CMake的FindOpenCV模块原生支持识别带版本后缀的库文件,你只需要在FIND_PACKAGE时明确指定版本号,就能让CMake精准查找对应版本的库:FIND_PACKAGE(OpenCV 3.4.1 REQUIRED)设置完成后,
OpenCV_LIBS变量会自动包含所有带341后缀的OpenCV库。手动指定OpenCV配置目录(自动查找失效时使用)
如果自动查找没生效,大概率是CMake没找到OpenCV编译生成的配置文件。你可以先设置OpenCV_DIR指向编译后OpenCV的cmake配置目录(比如D:/opencv-build/install/x64/vc15/lib/cmake/opencv3,根据你的实际路径调整),再执行查找:SET(OpenCV_DIR "D:/your-opencv-build-output/cmake" CACHE PATH "Path to OpenCV's cmake config directory") FIND_PACKAGE(OpenCV REQUIRED)编译生成的
OpenCVConfig.cmake文件里已经包含了所有带版本后缀的库的信息,CMake加载它之后就能正确填充OpenCV_LIBS变量。编译OpenCV时的优化设置
如果你还能重新编译OpenCV,可以开启BUILD_opencv_world选项,这样会生成一个合并的opencv_world341.lib文件,后续项目里只需要链接这一个库就行,不用处理一堆带后缀的分库,能省不少事。另外,记得确认CMAKE_INSTALL_PREFIX的设置,安装后的路径最好能让CMake方便找到,或者加入系统环境变量。
内容的提问来源于stack exchange,提问作者Luca

