序
具体流程的话,官方文档里都有的:C++ programming with Visual Studio Code
- 浏览器下载一个mingw64,解压,配置环境变量
- vscode里安装c++相关的插件
- 没了
第一步只看文字,可能有点抽象,相关视频:
关于mingw64的下载:【【教程】VScode中配置C语言/C++运行环境】 【精准空降到 01:32】
下载以后环境变量的配置:【安装mingw】 【精准空降到 05:32】
流程大概就是如此,这里主要记录遇到的一些问题。
文件的解压
mingw64,下载以后,是个7z格式的压缩包,需要解压。(解压前约40MB,解压后约400MB)
windows原生好像解压不了这种格式的,所以这里装了下这个:
7-Zip
假如中间出了错
比如,写的是cpp,但是第一次选编译器的时候误选了gcc而不是g++,就可能会报错。
怎么改回来?
官方文档:编译器只有第一次才会弹窗,让手动选编译器,后面就默认照着第一次选的来了。
所以,弹窗选择编译器只存在于首次运行,第一次选错了,它就会把一个错误的值当成默认值,后面也不会再弹窗让选择了,只能将错就错……
这个时候,可以删掉.vscode文件夹。默认的设置就在这个文件夹的tasks.json里,把它删了,默认的就不存在了,再运行就会弹窗提示重新选择编译器了。
和tasks.json相关的配置错误,应该都能这么搞吧。
关于编译器的介绍
mingw64是什么的缩写?简单介绍一下
- Mingw-w64是一个基于MinGW(Minimalist GNU for Windows)的跨平台开发环境,用于在Windows操作系统上构建和编译GNU软件。它提供了一个完整的GNU环境,包括C、C++、Fortran等语言的编译器、调试器、库文件等。
- Mingw-w64中的"mingw"表示"Minimalist GNU for Windows",而"w64"则表示它支持64位Windows操作系统。与传统的MinGW相比,Mingw-w64具有更好的兼容性和可移植性,支持更多的Windows API函数,并且可以更好地处理64位代码的编译和调试。
- Mingw-w64的开发始于2000年,经过多年的发展和改进,已经成为一个稳定且广泛使用的跨平台开发工具。它为开发者提供了一个在Windows上构建和调试GNU软件的环境,使得开发者可以在Windows平台上进行开发,并生成可在多种操作系统上运行的可执行文件。
什么是gnu软件?
- GNU软件是由自由软件基金会(FSF)开发和维护的一个操作系统,其名称来源于GNU(GNU's Not Unix)的缩写。GNU软件是一种与Unix系统兼容的类Unix操作系统,由一系列软件应用程序、开发人员工具以及一个分配资源并和硬件或内核通信的程序组成。
- GNU软件包括许多知名的大型软件,如GNU Compiler Collection(GCC)、GNU Debugger(GDB)、GNU Binutils、GNU Hello等。其中,GCC是GNU系统的主要编译器,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。GDB是GNU系统的调试器,可以用于在程序运行时进行调试。GNU Binutils是一组二进制工具,包括ld、as、objcopy等,用于处理二进制文件。
- GNU软件的一个重要特点是其自由软件许可证,这意味着用户可以自由地获取、使用、修改和分发该软件的源代码。此外,GNU软件还强调用户的自由和权利,包括对软件的支配权和使用权,以及保护用户的隐私和自由。
- 总之,GNU软件是一个基于Unix开发设计,并与Unix兼容的类Unix操作系统,由自由软件基金会开发和维护。它包括许多重要的软件应用程序和开发工具,并且强调用户的自由和权利。
mingw64,gcc,g++,gdb,有什么关系?
- mingw64:这是一款可以在Windows操作系统上编译和运行GNU程序的工具,它提供了一个GNU环境,包括GCC(GNU Compiler Collection)编译器、GNU binutils工具、GNU Hello程序等。mingw64可以让你在Windows上编译运行GNU程序,也可以让你的程序调用Windows的API函数。
- gcc:GNU Compiler Collection(GCC)是一款自由软件,它提供了编译、汇编、链接等程序语言开发所需的各种工具。GCC支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。它是一款非常强大的编译器,可以编译各种类型的程序,包括桌面应用程序、服务器程序、嵌入式程序等。
- g++:GNU g++是GCC编译器的一个C++编译器,它可以将C++源代码编译成可执行程序。g++支持C++语言的各种特性,包括类、模板、异常处理等。它是C++程序员的必备工具之一。
- gdb:GNU Debugger(GDB)是一款源代码级别的调试器,它支持多种编程语言,包括C、C++、Objective-C、Fortran等。GDB可以让你在程序运行时进行调试,包括设置断点、单步执行、查看变量值等操作。它是程序开发人员调试程序的重要工具之一。
如何理解task.json里的args?
这个args,是从哪里冒出来的? ——结合命令行,就好理解了
命令行与参数
三分钟上手g++编译器_哔哩哔哩_bilibili
这里,命令行的-o参数的值设置的是test
这个例子,也类似:
MinGW-w64 C/C++编译器下载和安装_mingw64_石凌风SLF的博客-CSDN博客
参数与json
vscode里,图形界面里点一下run就运行了,没用到命令行。怎么做的?命令行套壳。 比如给ffmpeg套图形界面的壳。
所以,命令行只是被套了个壳,看不见了,并不是不存在了,所以,命令行参数还是要指定的。
在哪里指定?在vscode的json文件里:
{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "D:\\software\\mingw64\\bin\\g++.exe","args": [ // arguments,参数"-fdiagnostics-color=always","-g","${file}","-o", // 参数名,表示这里是要给-o参数赋值,而不是-g参数或者其他的什么参数"${fileDirname}\\${fileBasenameNoExtension}.exe", // 想要给-o参数赋的具体值],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
后记
个人理解,仅供参考