admin 管理员组

文章数量: 887016

目录

  • 前言
  • 环境
  • 步骤
    • 1. vscode
      • 1.1 安装VSCode
      • 1.2 配置C/C++环境
    • 2.minggw-w64
    • 3. cmake
    • 4. opencv
  • 后记
  • 参考

前言

日期:2021/4/24
本篇博客对在Win10下使用VSCode+mingw+cmake的组合配置OpenCV3环境进行了总结,相比于同主题下的其他博客,有以下不同:

  • 内容较全面
  • 说明较详细
  • 版本较新
  • 授人以鱼不如授人以渔

环境

OS - win10
vscode - 1.55.2
mingw-w64 - 8.1.0
cmake - 3.20.1
opencv - 3.4.14

步骤

1. vscode


【作者注】VSCode生态非常完善,强烈建议有一定英语基础的读者直接参照VSCode官方文档Docs进行安装;阅读有困难的读者可以同时对比阅读Docs和网上的博客教程进行安装。


1.1 安装VSCode

进入 VSCode 官网 ,查看官方文档Docs,左侧导航栏点击SETUP,在展开菜单点击Windows,按照右侧Installation流程1-2-3完成即可,注意下面Tip的内容,可以用code . 检验一下环境变量是否添加成功。

1.2 配置C/C++环境

左侧导航栏点击LANGUAGES,在展开菜单中点击C++

按照最右侧IN THIS ARTICLE标题下面的流程进行,其中的主要步骤如下:

  1. 安装C/C++扩展(Install the extension

  2. 安装编译器(Install a compiler)
    (如果此处读者觉得Docs中对mingw-w86的安装示例过于简略,可以跳转到 2.mingw-w86 标题阅读相关内容)

  3. 编译并运行第一个程序(Hello World

看完Hello World再往下拉会有一个Tutorials目录,它提示我们根据自己的环境查看对应的教程,因为我们是在Win10操作系统中安装了MinGW-W64这种GCC,所以点击第一个超链接GCC on Windows via MinGW


【作者注】: 值得一提的是,MinGWMinGW-W64其实是两个不同的软件(项目),这里的超链接写的虽然是MinGW,但点进去发现实际上使用的是MinGW-W64。关于两者的联系和区别,有兴趣的读者可以参考维基百科 MinGW


继续上面的说,点击超链接后跳转到如下页面(不点超链接也可以通过左侧导航栏C++菜单中GCC on Windows跳转),下图中橙色方框即验证了上面所说,即实际使用的是MinGW-W64项目。

在这个教程中,我们仍按照最右侧IN THIS ARTICLE标题下面的流程进行,有些步骤我们已经做过,剩下的主要步骤如下:

  1. Create Hello World
  2. Build helloworld.cpp
  3. Debug helloworld.cpp
  4. C/C++ configurations

Create Hello World模块中,有关于 配置文件 的说明(如下图),它提示我们在“workspace”中有一个.vscode文件夹,里面有3个基本的 .json 配置文件,各自的作用标在括号里。

这3个配置文件分别对应于上述主要步骤的第2、3、4步,每一步对其中一个配置文件内的参数作用都做了详细说明,按照Docs配置即可。

恭喜你!将这一篇教程从头至尾跟下来,你已经掌握了如何用 VSCode 编译调试运行 C/C++程序了。


【作者注】需求决定方法

  • 如果你的需求仅仅是借助vscode环境,完成临时紧急的任务,此时配置环境是 手段 ,网上很多配置教程直接给出了3个 .json文件的代码内容,要求读者在其基础上根据自己的环境进行修改,那么你可以参考这些教程。
  • 如果你的需求是学习,那么此时配置环境是 目的 ,所以希望读者可以自己按照Docs进行配置,了解配置文件内每一个参数的作用。短期来看,因为每一篇参考教程遇到的问题可能都不一样,别人的解决办法不一定适用于你的电脑环境,进行本质性学习之后,可以灵活地根据自己的报错,具体问题具体分析;长期来看,这也有助于培养我们阅读官方文档的习惯和能力。个人认为后者更为重要一些。

2.minggw-w64

进入 mingw-w64官网 中点击download

跳转后,下拉页面,点击我们需要的版本

跳转后,点击安装超链接


【作者注】{Sourceforge是一个类似于国内百度网盘的云盘,很多开源软件都存储在上面}



跳转后,网页会显示5s倒计时(图中上方红框),倒计时结束后自动开始下载(若未自动开始下载,请使用离线安装方式)。注意此时下载的是mingw-w86 install,是一个在线安装包,安装过程需要链接远程服务器,有些读者的网络下载速度可能受限,也可以考虑使用离线安装方式。

无论在线/离线安装,都有以下主要步骤,可参照官方文档Docs:

  1. 安装“配置合适”的mingw-w64
    (1)在线安装方式
    安装包下载完成后,即可按照VSCode官网Docs里面的教程操作。

    (2)离线安装方式
    在sourceforce中点击Files,下拉并选取我们需要的版本。教程中的mingw-w86版本如下,按照教程选取即可:
    x86_64-8.1.0-posix-seh-rt_v6-rev0

  2. 添加环境变量

    注意:在线/离线安装方式均需要手动添加环境变量

  3. 检查是否安装成功


各个参数的简要说明如下(*选读)

  • Version(版本号) :
    一般选择最新版本,向前兼容,作者安装时最新版本为8.1.0
  • Architecture(架构) :
    • i686:用于 32 位操作系统
    • x86_64:用于 64 位操作系统
  • Threads(线程):
    • win32 : 不支持C ++ 11多线程特性, 使用 win32 api
    • posix : 支持C ++ 11多线程特性,使用 posix api
  • Exception(异常处理):
    • SJLJ : 兼容 32 位和 64 位操作系统,
    • DWARF :专用于 32 位操作系统
    • SEH : 专用于64 位操作系统
  • Build revision (创建的迭代版本)
    一般选最新迭代版本,即1优先0
    (作者选的SEHBuild revision只有0 )

【作者注】:{网上有些mingw安装教程认为:“win32是用来编写在Windows平台上运行程序的,而posix是用来编写在类Unix平台上运行程序的,所以在win10系统应该装win32版本”。作者之前在vscode上配的也一直是win32版本的,可以正常使用。但是这次我们要在VSCode平台配置opencv环境,需要重新编译opencv的源程序,而这又需要支持C++11标准的编译器才可以,否则在后面CMake环节会出现种种编译错误,所以此处我们按照VSCode官方Docs中的示例,选择posix线程模型即可。关于两种线程模型的更多详细信息,可参考win32和posix}


3. cmake

进入CMake官网,点击右侧download
跳转后,下拉页面找到最新版本,然后找下面二进制可执行文件(不要下成源程序文件了),因为我们电脑的环境Win10是WIindows的64位操作系统,所以在前两个中选一个下载,一般是先下安装包(第一个),如果安装包下载失败或者安装失败,才选择直接下压缩文件(第二个)。

下载完成后,按照提示安装/解压即可,详细安装过程可参照blog

注意

  • 若选择下载安装包方式,则在安装过程中需要勾选 添加环境变量 选项
  • 若选择下载压缩包方式,则需要手动添加环境变量

4. opencv

进入 opencv 官网,点击 Library

跳转后选择最新的opencv3.x.x,作者下载的是3.4.14版本,点击Windows

跳转到sourceforge后,和下载mingw-w64一样,先有5s倒计时,倒计时结束后自动开始下载(需要挂梯子)

如果没有自动开始下载,可以尝试点击Problems Downloading(如下图)

然后在弹出来的镜像源中选择 中国台北National Center for High-Performance Computing,网页自动刷新后即会开始下载。


下载完成之后点开opencv-3.4.14-vc14_vc15.exe解压,解压之后进入如下目录新建一个文件夹MinGW用来存放待会用mingw-w64编译opencv产生的的文件(下面的vc14和vc15是用x64架构下别的版本的编译器(MSVC)编译出的库文件)

接下来要用CMake辅助编译,找到cmake-gui.exe打开,填入自己源程序刚创建的MinGW文件夹的绝对地址,点击Configure。

弹出选项框,选择Specify native compilers,点击下拉箭头找到MinGW Makefiles,点Next

分别填入你电脑上mingw-w64文件夹中gcc.exeg++.exe的地址,点Finish

等右侧进度条走完后,配置选项框里会出现一系列name:value键值对,我们需要找到ENABLE_CXX11并勾选,其余选项默认即可,点击Generate,等待进度条读完。

打开cmd,cd到MinGW目录下,输入minGW32-make -j 8开始编译。-j为可选参数,-j 8为8线程编译,前提是电脑为8核处理器,根据自己配置可选择-j 4或者不加(即默认单核编译)。编译进度到100%后,在cmd输入minGW32-make install 创建installl文件夹完成装载,完成后,可以在刚新建的MinGW文件夹下面找到install文件夹,里面即是待会要用到的所有的链接库,为了能找到这些链接库,我们需要将.../MinGW/install/x64/mingw/bin添加到系统的环境变量中。

为了让VSCode能够找到我们刚刚编译出的opencv的库文件,我们需要在原有的基础上对配置文件(task.json, launch.json, c_cpp_properties.json)做出一定的调整。在对VSCode官方文档进行学习之后,我们已经了解了这3个配置文件各自的作用,显然在debug的时候并不会用到新增的库文件,所以 launch.json不用修改,但是我们需要在编译智能感知 环节,让VSCode找到我们的库函数,所以需要分别修改task.json中传入参数args部分和c_cpp_properties.jsonincludePath部分,我将修改后的两个文件整个附在了下面,请读者着重关注上述的两个部分中关于opencv的改动。

task.json如下:

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe build active file",
			"command": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
			"args": [
				"-g",
				"${file}",
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe",
				"-I",
				"D:/opencv/build/x64/MinGW/install/include",
				"-I",
				"D:/opencv/build/x64/MinGW/install/include/opencv",
				"-I",
				"D:/opencv/build/x64/MinGW/install/include/opencv2",
				"-L",
				"D:/opencv/build/x64/MinGW/install/x64/MinGW/bin/lib*"
			],
			"options": {
				"cwd": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "compiler: D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe"
		}
	]
}

c_cpp_properties.json:如下

{
    "configurations": [
        {
            "name": "GCC",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/opencv/build/x64/MinGW/install/include",
				"D:/opencv/build/x64/MinGW/install/include/opencv",
				"D:/opencv/build/x64/MinGW/install/include/opencv2"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "D:/mingw-w64/x86_64-8.1.0-posix-sjlj-rt_v6-rev0/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerArgs": [],
            "browse": {
                "path": [
                    "${workspaceFolder}/**"
                ],
                "limitSymbolsToIncludedHeaders": true
            }
        }
    ],
    "version": 4
}

读者可以利用以下代码段,测试一下opencv是否能正常使用(读取图片并显示)

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{
    Mat img=imread("...xxx.jpg"); //填入你电脑中一张图片的绝对地址
    cv::imshow("image",img);
    cv::waitKey();
    return 0;
}

后记

  1. 感谢参考博客中的前辈提供的经验;
  2. 要用什么软件,先去官网看一看,一般最简单的下载方法和使用说明都在官网有;

参考

将 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)
Windows下 VS Code搭建C++和opencv开发环境
opencv C++ Windows10 VSCode配置环境
Win10+VSCode搭建opencv+C++环境(1)
Win10+VSCode搭建opencv+C++环境(2)

本文标签: vscode