目录
编辑器与IDE
上一篇博客已经介绍过了C++程序的一个编译流程,从这篇文章开始进行编程的实验。
正所谓“工欲善其事,必先利其器”,有很多小白入门时大把的时间都被浪费在配置和安装开发环境上,因此这篇博客将从易于理解的角度来讲讲怎么样配好一个C++的开发环境,目标是一次学习永远记忆。
其实写一个能运行的程序是一个很简单的事情,如果你用的是windows系统可以直接创建一个扩展名为.cpp的文件,然后用自带的文本编辑器进行编辑,然后在终端使用g++编译器对其进行编译就能得到一个能运行的.exe文件了,因此C++开发环境只需要文本编辑器+编译器即可完成搭建。
但事实上,为了更舒服与高效地写程序,我们还需要许多额外的功能,例如自动补全、语法纠错、程序调试 等。单个文本编辑器(例如vscode)不具备这样的功能,因此还需要安装额外的一些插件来配合使用,这就是这章主要讲的内容如何在vscode上安装与配置好C++开发需要的插件。
但对于IDE(集成开发环境)来说,这些插件功能与文本编辑器本身已经融为一体,不需要额外的安装配置,使用起来比vscode轻松简单很多,常见的IDE有,DevC++、VS、CLion,Eclipse等。但为什么还需要劳心费力地教大家学习使用vscode呢?
- 首先,vscode全开源,市面上大部分的IDE都需要收费与许可证。
- 其次,vscode可以在Windows也可以在Linux上使用,一次学习终身有用。
- 最重要的是vscode支持多种多样的插件与扩展功能,例如ai代码补全等,拥有传统IDE不具备的灵活性。
- 最后一点就是帅!能显得自己很专业。
基于vscode的C++开发环境配置
1. 下载vscode、浅尝编译。
做这一步前,请先确认你安装了MinGW编译环境。
点击这个链接进入官网进行下载,完成之后进行安装,这里要注意,安装路径不要出现中文!!!。
安装好后我们打开vscode:
(选做,只看就行)此时界面一片漆黑,还有很多看不懂的外国语。我们先不着急进行汉化,来浅尝一下vscode作为文本编辑器的功能,新建一个hello_world.cpp文件,并在其中写入经典开局代码:
#include<iostream>
int main()
{
std::cout << "hello world!\n" <<endl;
return 0;
}
明摆着告诉你,上面的代码里有些问题(自己去发现)。但是在vscode中显示的效果如下:
我们可以发现,vscode作为一个文本编辑器,对于编程自带高亮功能,这表明它其实是专门设计用来编程的一个文本编辑器。并且重要的是,原生的vscode对于错误代码并没有纠错能力更不要说自动补全功能了。
根据前面的知识,我们可以使用终端运行g++编译器来对上面的代码进行编译:
点击Terminal-->New Terminal在vscode中创建一个终端。
在终端中输入g++ --version
查询一下编译器是否存在以及是否好用。如果显示你没有安装编译器,那么可以自行百度一些MinGW(推荐)或者MSVC的安装,十分简单。
输入g++编译指令,对代码进行手工编译:
g++ hello_world.c -o hell_world
如果你代码没改好,那么编译就会报错,显示endl前少了作用域std:: 补上这个部分,运行编译:
发现不再报错,同时我们的文件夹下多了一个hello_world.exe文件,输入:
.\hello_world.exe
执行结果如下,果然输出了hello_world!语句
番外篇
g++编译器利用-c
选项可以只编译出.o
文件,再通过手工链接的方式将.o
·文件链接为.exe
可执行文件。
2. 安装插件,赋能编程。
点击最左边的扩展,搜索扩展插件:
C/C++编程安装两个插件即可:
- Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(汉化包)
- C/C++ Extension Pack(这个包包含了C/C++、C\C++Themes、CMake Tools)
安装完重启后,如下图:
这下我们发现,vscode开始自动纠错了,并且补全等功能也有了,仿佛似乎它已然成为了一个IDE。并且注意右上角新出现的三角形
点击后发现有两个选项:
点击运行C/C++文件,在随后的选项框中选择我们需要的编译器g++:
这样,我们就可以实现代码一键运行功能了。
总结:安装插件后,vscode得以实现自动纠错、代码补全、一键编译、一键调试等功能。
3. 各种json文件的作用。
在Visual Studio Code(VSCode)中,.vs文件夹是一个用于存储与项目相关的配置和临时数据的目录。下面介绍几个重要的.json文件。
c_cpp_properties.json
这个文件主要用来配置C/C++编辑器的自动补全和索引等功能。按下 F1 调出面板,输入 C/C++,选择编辑配置(UI)。
首先找到编译器路径选项,将编译器地址放入:
然后再配置IntelliSense模式,IntelliSense是代码补全工具,将其设置为与编译器兼容的格式,例如这里是gcc-x64。
接下来再配置自动补全的包含路径:包含路径就是#include文件所在的路径,这里面默认有了一个workspaceFolder,代表当前目录下的所有文件,如果使用的库不在当前的工作目录下则需要在这里手动添加进去。
一般情况下,标准库的文件编译器是会自动去寻找的,但有时候标准库文件会提示找不到库,那么就需要在这里手动地把库头文件路径包含进去了。具体查询方式如下:
g++ -v -x c++ -E -
将后面这几行粘贴进去(注意去掉前面的空格)。
最后再设置一下C++标准:
然后我们可以发现,.vs文件夹下多了个文件:c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22621.0",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64",
"compilerPath": "\"D:\\mingw64\\bin\\g++.exe\""
}
],
"version": 4
}
其实就是把我们在窗口内配置的信息转成了json代码。
task.json
当我们选择了编译器后(点击一键运行),项目配置文件夹.vs
下就会生成一个task.json文件。这个文件的内容如下:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件", #任务标签(名字)
"command": "D:\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
task.json文件主要是用来指导编译过程的,其中很重要的两条是:
"command": "D:\\mingw64\\bin\\g++.exe" //这条指定了用哪个编译器。
"args": [ //这条指定了编译指令的参数
"-fdiagnostics-color=always",
"-g", //启用调试学习
"${file}", //源文件名
"-o", //输出文件
"${fileDirname}\\${fileBasenameNoExtension}.exe" //输出文件名
]
launch.json
launch.jsons是调试配置文件,位于.vscode隐藏文件夹下。生成调试配置文件launch.json的方法很简单:打开vscode左边栏的运行于调试即可创建。
然后选择使用的调试器即可完成创建:
然后可以选择一种调试器的模板:
但是,这里我们需要对launch.json模板修改,代码如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.exe",//替换成task.json里生成的可执行文件名字
"args": [], //传递给.exe的参数
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/path/to/gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
"preLaunchTask": "C/C++: gcc.exe 生成活动文件" //换成task.json的label名
}
]
}
各个参数的意义:
基础参数name
作用: 调试配置的名称,显示在调试启动下拉列表中。
示例: “name”: “Python: Current File”
type
作用: 指定调试器类型,需与安装的调试扩展匹配(如 python, node, go, cppdbg)。
示例: “type”: “python”(使用 Python 扩展调试)
request
作用: 定义调试请求类型:
launch: 启动新程序进行调试(默认)。
attach: 附加到已运行的进程。
示例:"request": "launch"
program
作用: 指定要调试的入口文件路径(适用于编译型或脚本语言)。
示例:"program": "${file}"
(调试当前打开的文件)
语言/环境相关参数
args
作用: 传递给程序的命令行参数列表。
示例:
 "args": ["--port", "8080", "--verbose"]
env
作用: 设置调试时的环境变量。
示例:
"env": {"PYTHONPATH": "${workspaceFolder}/src", "DEBUG_MODE": "true"}
cwd
作用: 指定调试器的工作目录(程序运行的根路径)。
示例: “cwd”: “${workspaceFolder}/bin”
高级调试配置
preLaunchTask
作用: 调试前自动执行的任务(需在 tasks.json 中定义)。
任务名要和tasks.json里面的"label"值对应一致
console
作用: 控制调试控制台类型:
internalConsole: VSCode 内置终端(默认)。
integratedTerminal: 使用 VSCode 集成终端。
externalTerminal: 打开外部系统终端。
示例: “console”: “integratedTerminal”
stopOnEntry
作用: 是否在程序入口处自动暂停(用于逐行调试)。
示例: “stopOnEntry”: true
几个注意的点就是:
- program,改成与task.json中一致的
- preLaunchTask改成task.json的label值
配置完成后即可开始程序的调试,例如打断点,查看变量等。
总结&&彩蛋
本篇文章目的在于走通流程,具体的内容例如json文件怎么写,各个参数具体的含义还需要大家自己去查更多的资料。最后,留给大家一个彩蛋,这其实是一个vscode一键配置的程序,具体使用如视频所示。我看了一下,真的确实很方便,希望能带给大家帮助吧!