VS Code 配置C语言开发环境
一、环境配置
Step1 安装VScode
安装VsCode,官网下载地址:Visual Studio Code
完全卸载VScode
①首先进行简单的卸载;
②删除C:\Users下的.vscode文件夹
③删除C:\Users\AppData\Roaming下的Code文件夹
Step2 安装MinGW
①安装MinGW编译器
官网:MinGW-w64
软件下载:WinLibs - GCC+MinGW-w64 compiler for Windows
如果下载速度较慢也可在此处下载: https://download.csdn.net/download/hfy1237/87802657
MinGW版本:
- x86_64-posix-sjlj
- x86_64-posix-seh
- x86_64-win32-sjlj
- x86_64-win32-seh
- i686-posix-sjlj
- i686-posix-dwarf
- i686-win32-sjlj
- i686-win32-dwarf
注意:
在使用32位编译器(i686)时,你所使用的第三方库也必须时32位;
在使用64位编译器(x86_64)时,你所使用的第三方库也必须时64位;
- DWARF:一种带调试信息的包, 所以比一般的包尺寸大,仅支持32位系统。dwarf 的性能要优于 sjlj。
- SJLJ:跨平台,支持32、64位系统,稳定性好。缺点是:运行速度稍慢,GCC不支持。sjlj支持32、64两种编译,需加-m32或-m64参数。
- SEH:性能较好,调用系统机制处理异常,支持32,64位系统,缺点是:GCC不支持。
- posix: 开发 Linux、Unix、Mac OS 等操作系统下的程序,启用了C++ 11 多线程特性。
- win32: 开发 Windows 程序,未启用C++ 11 多线程特性。
②将MinGW的bin文件夹添加到系统的PATH环境变量。
PATH环境变量的目的是指定命令的搜索路径,方便当前程序寻找指定的运行程序。
③打开Windows的命令行窗口,输入以下代码测试:
gcc --version
g++ --version
gdb --version
如何无法执行上述三个命令请检查是否正确配置环境变量。
Step3 安装C/C++扩展
打开VSCode软件,安装C/C++扩展,如下图所示:
二、使用方法
①创建一个新的文件夹用于保存项目相关文件,本文为MyProject;
②在VScode中打开此文件夹(快捷键Ctrl+K+O)
③在工作空间根目录下创建子文件夹src用于保存源代码文件;
④在src文件夹下创建新的文件main.c,并复制下面的内容到文件中;
#include <stdio.h>
int main()
{
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}
⑤点击左上角的播放按钮;
⑥选择gcc;
⑦选择“Run and Debug”,继续选择“C++(GDB/LLDB)”;
三、配置文件说明
1. tasks.json
此文件主要是告知VScode如何构建(编译)源代码,用于编译设置。
打开方法:在命令面板输入tasks,选择如下如下红色矩形部分,即可打开task.json文件。
参数名 | 功能 |
---|---|
type | 编译环境类型。 |
label | 当前任务名,可自行设置。 |
args | 编译选项,包括所的编译文件、保存编译文件的目录等。 |
command | 编译器所在的绝对路径。 |
options-cwd | 编译器所在目录 |
任务构建快捷键:Ctrl + Shift + B
构建完成后可输入:.\可执行程序 运行
说明:
- 修改 "${file}" 为 "${workspaceFolder}\\*.c" 可构建当前工作区的所有文件。
- 修改 "${fileDirname}\\${fileBasenameNoExtension}.exe" 为 "${workspaceFolder}\\MyExe.exe" 可将编译输出的文件硬编码为 MyExe.exe 。
2. launch.json
此文件主要主要是告知VScode如何调试程序,用于自定义调试。
打开方法:按照下图所示步骤可打开launch.json文件。
参数名 | 功能 |
---|---|
name | 调试任务名称 |
type | 调试环境的具体类型 node 、java 、cppdbg 等等 |
program | 被调试可执行文件的绝对路径 |
args | 程序调试时,传递给程序命令行的参数 |
stopAtEntry | 调试时,是否暂停在程序的入口处 |
cwd | 调试程序时的工作目录,一般为工作空间 |
externalConsole | 是否在控制台显示 |
MIMode | 指示MIDebugEngine将连接的控制台调试器。允许的值是 "gdb""ldb"。 |
miDebuggerPath | 到MI调试器(如gdb)的路径。当未指定时,它将首先搜索调试器的路径。 |
preLaunchTask | 代表的是在调试之前要执行的任务,必须与tasks.json的label对应。 |
request:调试模式,一共有两种模式。
launch
:和应用一起启动。attach
:在已启动的应用基础上附加调试器。
启动调试的方式:
- F5
- Run → Start Debugging
- 单击左侧调试图标 → 单击绿色调试图标
3. c_cpp_properties.json
此文件用于配置编译器、头文件路径、C\C++标准(默认C\C++17)等。
打开方法:进入命令面板(Ctrl + Shift + P),输入:edit,如下:
参数名 | 功能 |
---|---|
env | 用户自定义变量 |
configuration | 定义编译器、头文件、C\C++标准 |
version | c_cpp_properties.json文件版本,不可修改。 |
参数名 | 功能 |
---|---|
compilerPath | 编译器的完整路径 |
intelliSenseMode | 指定intelliSense的模式 |
includePath | 指定包含头文件的目录 |
cStandard | 指定C语言标准的版本 |
cppStandard | 指定C++语言标准的版本 |
4. 预定义变量(Predefined variables)说明
- ${userHome} - 计算机用户文件夹路径
- ${workspaceFolder} - VScode中打开的文件夹路径
- ${workspaceFolderBasename} - 在VScode中打开的文件夹名称
- ${file} - 当前打开的文件
- ${fileWorkspaceFolder} - 当前打开文件的工作空间文件夹
- ${relativeFile} - 相对于
workspaceFolder的当前打开文件
- ${relativeFileDirname} - 当前打开的文件相对于工作空间的目录名
- ${fileBasename} - 当前打开文件名
- ${fileBasenameNoExtension} - 当前打开文件的基本名称,不包括文件扩展名
- ${fileDirname} - 当前打开文件的路径
- ${fileExtname} - 当前打开文件的扩展名
- ${cwd} - 启动VScode时,任务运行期的当前工作目录
- ${lineNumber} - 当前选定活动文件中的行数
- ${selectedText} - 当前活动文件选择的文本
- ${execPath} - 正在运行VScode可执行文件的路径
- ${defaultBuildTask} - 默认构建任务的名称
- ${pathSeparator} - 操作系统用来分隔文件路径中的组件的字符
- ${env:Name} - 计算机的环境变量
例如:
当前被打开的文件路径:/home/your-username/your-project/folder/file.c
工作空间根目录:
/home/your-username/your-projec
预定义变量对应值如下:
- ${userHome} -
/home/your-username
- ${workspaceFolder} -
/home/your-username/your-project
- ${workspaceFolderBasename} -
your-project
- ${file} -
/home/your-username/your-project/folder/file.c
- ${fileWorkspaceFolder} -
/home/your-username/your-project
- ${relativeFile} -
folder/file.c
- ${relativeFileDirname} -
folder
- ${fileBasename} -
file.c
- ${fileBasenameNoExtension} -
file
- ${fileDirname} -
/home/your-username/your-project/folder
- ${fileExtname} -
.c
- ${lineNumber} - 光标的行号
- ${selectedText} - 在代码编辑器中选择的文本
- ${execPath} - Code.exe 的位置
- ${pathSeparator} -
/
在 macOS 或 linux 上,\
在 Windows 上
4. 配置方式一
此配置方式将生成的二进制文件放入工作空间下的指定文件夹build中,你也可修改build名称。
tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "gcc编译并运行",
"command": "D:\\A\\MinGW64\\bin\\gcc.exe",//此处为你的gcc.exe路径
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: gcc.exe 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:\\A\\MinGW64\\bin\\gdb.exe", //此处为你的gdb.exe路径
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc编译并运行"
}
]
}
5. 配置方式二
此配置方式适用于包含第三方库的使用,主要对tasks.json文件进行修改即可。
将 tasks.json 文件中的 args 参数添加两个路径,如下图所示:
完整 tasks.json 文件内容如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++.exe build active file",
"command": "D:\\mingw64\\bin\\g++.exe", /*此处设置为你的编译器路径*/
"args": [
"-g",
"${file}",
"-L'F:\\Project\\SP++3.0\\lib'", /*注意,此行指定库的lib目录,默认没有*/
"-I'F:\\Project\\SP++3.0\\include'", /*此处指定库的include目录,默认没有*/
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "D:\\mingw64\\bin" /*此处设置你编译器路径的bin目录下*/
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
注意:快捷键F5和播放按钮使用不同的配置执行代码。
6. 多文件编译
多文件编译时,在tasks.json 文件下的 "args" --> "-g" 参数后添加指定的文件,并用逗号分隔即可,实例如下:
"-g",
"${workspaceFolder}\\src1\\*.c",
"${workspaceFolder}\\src2\\*.c",
"${workspaceFolder}\\src3\\*.c",
四、gcc参数解读
gcc带不同参数的含义:"-g"产生调试信息,"-c"编译中间目标文件,"-I"指定链接库,"-o"生成指定命名的可执行文件。
五、常见问题解决
1. 执行代码控制台闪退问题的解决
方法一
修改 launch.json 文件中的 "externalConsole" 为 false
"externalConsole":false,
方法二
在主程序最后添加 system("pause");
system("pause");
方法三
在主程序最后添加 getchar();
getchar();
2. 乱码解决
方法一
增添头文件<windows.h>并调用API函数SetConsoleOutputCP(65001)
方法二
更改VScode的编码格式为GBK,或者也可以将源代码文件用记事本打开并另存为ANSI编码格式。
方法三
修改VScode的setting.json配置文件,统一为一种编码格式即可。
方法四
Windows (中文) 默认的字符集是 Windows-936 (GBK),而 GCC 编译器默认编译的时候是按照 UTF-8 解析的,当未指定字符集时一律当作 UTF-8 进行处理,于是造成乱码。因此在GCC编译时添加以下参数即可解决。
-fexec-charset=gbk
-finput-charset=gbk
更多推荐
所有评论(0)