COD*_*EaD 1 opencv cmake clion
我正在尝试使用opencv.org提供的OpenCV for Windows,我正在使用JetBrains的CLion IDE构建一个项目.我已经安装了opencv库并配置了CLion()来引用它下面的构建目录,但是CMake发出了警告: set(OpenCV_DIR
Found OpenCV Windows Pack but it has no binaries compatible with your configuration.
You should manually point CMake variable OpenCV_DIR to your build of OpenCV library.
Run Code Online (Sandbox Code Playgroud)
我尝试了一些来自opencv.org的旧版本,结果相同.看来CMake正在定位OpenCV库,但不想使用它们.为什么,以及如何让OpenCV库在CLion下工作?
简短的回答是,您可能需要从源代码构建OpenCV才能将其与CLion一起使用.但考虑到这里*和其他地方使用JetBrains的CLion IDE和OpenCV库的部分答案和未答复问题的数量和范围,我认为需要概述(我的笔记来自CLion 2016.3和OpenCV 3.1,YMMV):
要在构建中使用OpenCV,必须在项目的CMakeLists.txt文件中指定它.您请求CMake找到您的OpenCV位置并将其链接到您的TARGET.CMakeLists.txt名为可执行文件的命令序列示例mushroom如下:
add_executable(mushroom ${SOURCE_FILES})
FIND_PACKAGE(OpenCV REQUIRED)
TARGET_LINK_LIBRARIES(mushroom ${OpenCV_LIBS})
(有关更多信息FIND_PACKAGE,请参阅CMake:如何查找库.)
FIND_PACKAGE对于包XXX,可以通过位于CMake 目录的FindXXX.cmake文件Modules,或通过咨询环境变量XXXX_DIR.在我的系统上,没有FindOpenCV.cmake文件,所以我依赖OpenCV_DIR环境变量.必须设置此项,而不是OpenCV安装的根目录,而是设置在其下的构建文件夹中.我在CMakeLists.txt中使用了一个条目来设置这个变量,例如:
set(OpenCV_DIR C:/Users/myacct/AppData/Local/opencv-3.0.0/build)
要与OpenCV链接,CMake使用FindOpenCV.cmake或OpenCV_DIR(请参阅上面的上一点)来查找名为OpenCVConfig.cmake的文件.此文件由OpenCV的特定版本生成并附带,以便记录存在哪些组件以及它们位于何处.
当OpenCVConfig.cmake使用的变量名与CLion存储在其环境中的变量名冲突时,可能会出现问题.特别是,如果您的OpenCV是由Microsoft Visual C( MSVC)构建的,就像 opencv.org的Windows发行版一样,它将无法与CLion一起使用.
因为CLion的构建工具链(ControlAltS-toolchain)使用MinGW或Cygwin,OpenCVConfig.cmake将在名为mingw或cygwin 的子目录下搜索OpenCV二进制文件,并且将找不到,因为二进制文件是使用MSVC构建的(它将在vc11等目录中查找或而是vc12).这可能意味着您需要从源代码构建OpenCV才能将其与CLion一起使用.
将OpenCVConfig.cmake重新配置为指向MSVC二进制文件是否可以正常工作?你可能会问.不幸的是,答案仍然是否定的,因为使用一个编译器构建的库通常不能与另一个编译器链接.
OpenCVConfig.cmake或FindOpenCV.cmake可能包含诊断消息,但是当CLion为您执行CMake时,message(STATUS)不会显示调用.要使它们显示,请将它们更改为message(WARNING)或message(FATAL_ERROR). 但是,CLion 2016.3 EAP缓解了这个问题; 请参阅/sf/answers/2757886141/.
CLion没有说明哪个.cmake脚本发出了哪些诊断信息; 不要以为它们都来自同一个脚本.
希望这为解决CLion/CMake/OpenCV兼容性问题提供了一些一般性指导.请注意,这不包括编译器或链接器问题; 这些将在CMake完成其初始makefile构建之后才会出现.发生编译器或链接的问题在后一阶段,并通过被控制include*(),link*()并且在其它命令的CMakeLists.txt.
*一些相关的SO问题:
使用CLion
OpenCV CLion(Cmake)链接问题的OpenCV Windows设置- cmake报告
使用OpenCV与Windows
上的Clion IDE 使用MinGW 在Windows上编译OpenCV时出现奇怪错误
无法找到模块FindOpenCV.cmake(配置过程中出错)
CMake:如果你需要指定CMAKE_MODULE_PATH,find_package()的用途是什么?
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |