准备:MinGW-w64(记得设置环境变量)、vscode(C/C++插件)、CMake、OpenCV源码
CMake与编译
打开CMake
- 指定源码目录(记为srcDir)
- 指定编译目录(记为buildDir)
- 点击
Configure配置,注:”Specify the generator for this project”选”MinGW Makefiles” - 配置中间的列表,根据资料,勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS(如果有的话),CPU_DISPATCH选空。
- 检查输出是否有误,无误点击
generate生成。 - 进入buildDir,打开cmd,用
MinGW32-make进行编译,可指定-j N多线程编译 - 编译完成,
MinGW32-make install安装 - 添加路径
buildDir/bin到环境变量
注:编译后,buildDir\\install\\x64\\mingw\\bin下的dll被自动转移到buildDir/bin下,所以这里只引用了一个。opencv的头文件在buildDir\\install\\include下,这里不添加到环境变量中。
配置VScode
打开VScode,按ctrl+shift+p打开C/C++: Edit Configurations (JSON),配置c_cpp_properties.json。此json指定includePath是给VScode看的,让其实现代码高亮。
1 | { |
**配置launch.jspn**。注意下面的preLaunchTask要与后面tasks.json中的label一致,才会正确启动;program的地址要与后面tasks.json中的args --> -o中的地址一致,因为这一项指定了程序生成的地址,若地址不一样,会找不到。此json主要是指定了程序生成的地址和preLaunchTask,也是给VScode看的。
1 | { |
**配置tasks.json**。这里指定用的是C:\\mingw64\\bin\\g++.exe作为编译器,args中还指定了输出文件地址、头文件地址(-I)、动态库文件地址(-L)、以及动态库。此json指定的编译的必须条件(头文件、库等),是给编译器看的。
注意:若在CMake中勾选了BUILD_opencv_world,那么其实只会生成一个动态库,不需要像这里一样引用那么多个库。并且库的表达方式比较特殊,在buildDir\\install\\x64\\mingw\\bin中,库的文件名称是libopencv_core451.dll之类的以lib开头的.dll文件,但是在指定时,需要指定为-lopencv_core451,即去掉lib & .dll,同时以-l开头(无空格)。
1 | { |
如果没有为buildDir\\bin设环境变量,那么执行时还需要把库文件复制一份到程序同级目录下,即dbg目录下(与-o指定目录同级)。所以放到其他电脑上运行时记得复制bin下的动态链接库。
测试
创建一个cpp文件,测试一下运行即可。
1 |
|