写C/C++,vs,code:block,devc++都用过,之前嫌麻烦就没在vscode配置c/c++环境。但看到大神们都是用的vscode,于是尝试用vscode运行个小项目:cjson
首先,cjson的项目结构很简单,如下图所示:
下面前提是先安装好vscode上的c/c++插件
首先,按住ctrl+shift+P,并选择下图 “配置UI”
配置好如下图所示:
不出意外的话,工作目录下有这样一个文件:
其内容如下:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "8.1",
"compilerPath": "D:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
然后,选中要执行的文件,按下图操作,选择到配置任务
选择用自己的gcc
得到task.json
由于这里是要运行整个项目,所以具体需要修改一下:
将"${file}"
删掉,改成"${workspaceFolder}\\*.c"
,并且修改掉自带的label名字(自取,简单就行)
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "xx", // 终极大坑,建议将label换成简单的名字。后面会讲
"command": "D:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe",
"args": [
"-g",
"${workspaceFolder}\\*.c", //改成这样
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "D:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "compiler: D:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe"
}
]
}
最后运行生成任务,得到exe文件
依旧选择这个
最后得到可执行文件:
在终端这里执行即可
每次运行都需要先生成可执行文件,然后再通过命令行运行,而且运行的终端还是在vscode里面,这显然有些不方便,于是我们可以引入launch.json文件,方便我们运行程序。
首先我们点击下图位置,得到初始的launch.json文件。
并进行以下修改(左边为原图,右边为修改后的图)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", //修改成tasks.json对应生成exe的文件位置和文件名称
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true, // 外部终端显示
"MIMode": "gdb",
"miDebuggerPath": "D:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/gdb.exe", // 记得改成我们自己的gdb(注意是gdb,不是gcc)
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "xx" // 与tasks.json中label保持一致(终极大坑,最好保持名字简洁!!)
}
]
}
说一下终极大坑:如果出现下面这种情况
看起来是编译生成exe的时候链接出了问题,但是直接用task.json生成可执行文件时,是成功的。所以并不是那个地方的错,经过几个小时不断试错,发现将tasks.json中的label改简单一点就行了(launch.json也要做对应修改)