一、先安装clang
brew install --with-toolchain llvm
注意安装的时候要接电源,因为编译需要花很长时间;我的Macbook pro 2017花了将近40分钟才编译完成,电池消耗大约30%
参考:https://embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
二、安装插件
C/C++
主页:https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptoolsC/C++ Clang Command Adapter
主页:https://marketplace.visualstudio.com/items?itemName=mitaki28.vscode-clang
三、配置
(一)创建工作区文件夹
建立一个文件夹,比如命名为 c_workspace
,然后在里面建立一个 .vscode
文件夹
在VSCode里面选择 打开文件夹
打开工作区,例如这里的 c_workspace
(二)配置文件
涉及到两个配置文件
- tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Compile",
"type": "shell",
"command": "clang",
"args": [
"${file}",
"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
"${fileDirname}/${fileBasenameNoExtension}",
"-g", // 生成和调试有关的信息
"-Wall", // 开启额外警告
"-std=c11" // C语言最新标准为c11,或根据自己的需要进行修改
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true
},
"dependsOn": [
"Sleep"
]
},
{
"label": "Clean",
"type": "shell",
"command": "rm",
"args": [
"-rf",
"${fileDirname}/${fileBasenameNoExtension}",
"${fileDirname}/${fileBasenameNoExtension}.dSYM"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true
}
},
{
"label": "Sleep", // 没有任何功能,只是简单暂停一下,增加视觉效果
"type": "shell",
"command": "sleep",
"args": [
"1"
],
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true
},
"dependsOn": [
"Clean"
]
},
{
"label": "Build",
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": [
"Compile"
],
"problemMatcher": "$gcc"
}
]
}
- launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true, // 如果要调试有输入互动的程序,那么就要从外部控制台启动;vscode的集成控制台不支持输入;
"MIMode": "lldb",
"preLaunchTask": "Build"
}
]
}
这两个文件的写法参考:https://code.visualstudio.com/docs/languages/cpp
(三)注意事项
- Task 之间的依赖关系:
每一个Task需要依赖的前置Task,写在 dependsOn: [ ... ]
当中,不分先后,并发执行;
如果需要有明确的依赖,则应该把 Task 依次连接,形成依赖链,例如上面的例子:
Build <-- Compile <-- Sleep <-- Clean
错误的做法:
Build <-- Compile, Sleep, Clean
即如果在 Build 当中:
"dependsOn": [
"Compile",
"Sleep",
"Clean"
]
的实际效果是:Build 在 这三个Task 全部完成之后再执行,但是这三个任务是并发的。
四、使用方法
(一)编译
快捷键:
shift
+command
+b
:编译,实际上是调用上面定义的 launch.json 里的任务命令面板:
shift
+command
+p
,键入Tasks: Run Task
,然后选择上面定义的Build
任务
(二)运行
- 在终端中运行
ctrl
+ ` 打开终端
- 在调试中运行
别忘记设置断点。由于程序是在外部命令行窗口执行的,别忘记把程序的窗口切换出来。
五、其它参考
Windows 下的安装和配置:https://www.zhihu.com/question/30315894
Clang 常用参数:https://www.jianshu.com/p/96058bf1ecc2