0x00 缘由
- 因为某些原因,需要使用VScode来编译C++文件。在各种Google之后,终于找到了配置的方法。
 
0x01 需要的组件
- 首先,我们需要VScode本体,和Windows下的C/C++ Build Tools,如果机子上已经安装了Visual Studio的话,可以略过这一步。
 - 若未安装Visual Studio的话,可以下载Visual C++ 2015 Build Tools
 - VScode插件需要安装了cpptools,以及powershell(cmd会导致输出乱码)。
 
0x02 配置tasks.json
- 做好以上准备之后,我们打开VScode。这里用的是最新版VScode(1.10.2),在这次更新中,tasks更新到了2.0.0。更新事项
 - 首先是用VScode打开一个文件夹,然后按下Ctrl+Shift+P打开命令窗口。输入tasks回车,就会自动创建一个tasks.json文件。
 - 在这里,我贴出我配置好的tasks.json:
 
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "Build",
            "command": "./build.bat",
            "args": [
                "${workspaceRoot}","${relativeFile}","${fileBasenameNoExtension}"
            ],
            "isShellCommand": true,
            "showOutput": "always"
        }
    ]
}
- 第一行的version代表了使用的tasks版本,这里必须是2.0.0
 - 接着的build.bat会在下面给出
 - args
- ${workspaceRoot}代表项目的根目录,也就是文件夹根目录
 - ${relativeFile}指当前打开的cpp文件和根目录的相对路径(包括文件本身)
 - ${fileBasenameNoExtension}则是不包括扩展名的文件名。
 
 
0x03 编写build.bat
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
cd /d %1
set compilerflags=/Od /Zi /EHsc /Wall /std:c++14
set linkerflags=/Fe:.build/main.exe
cl.exe %compilerflags% %2 %linkerflags%
del %3.obj
- 首先,这里第二行的call指向Visual Studio的vcvars64.bat文件。每个人电脑的路径都不一样,需要依据实际情况进行更改。若是下载的Visual C++ build tools,那么有可能是这样
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 - 第三行的
cd /d %1用于切换目录到项目的根目录。这里的%1是由前面tasks.json传入的值。 - 第四第五行是编译时的选项
- /Od:不做优化
 - /Zi:启用调试信息
 - /EHsc:启用 C++ EH (没有 SEH 异常),外部 "C" 默认为 nothrow
 - /Wall:启用所有的警告
 - /Fe:.build/main.exe: 保存exe文件到.build/main.exe
 
 - 第六行的%2指tasks.json传入的第二个参数,也就是当前打开文件的相对路径。
 - 第七行的del用于删除编译过程中产生的obj文件,%3指tasks.json传入的第三个参数,为不带扩展名的文件名。
 
0x04 编译
- 配置完上面两个文件之后,就可以按Ctrl+P打开面板,输入task **就可以看到我们在tasks.json中配置的任务项。选择Build**即可完成编译。
 - 同时,我们可以绑定Build任务到快捷键
 
     { 
        "key": "ctrl+shift+b", 
        "command": "workbench.action.tasks.runTask",
        "args": "Build"
    }
- 如此只要按Ctrl+Shift+B就可以快速编译当前打开的文件。
 
0x05 调试
- 打开调试窗口,点击左上的齿轮图标,可以看到有几个调试模板可供选择。这里我们选择C++(Windows),自动创建launch.json
 - 在这个文件里最主要的是这几个属性
 
"program": "${workspaceRoot}/.build/main.exe",
"symbolSearchPath": "${workspaceRoot};${workspaceRoot}/.build",
"externalConsole": true
- program指明需要调试的可执行文件路径
 - symbolSearchPath指明.pdb文件路径
 - externalConsole表示是否打开独立命令行窗口,一般为true
 
0x06 总结
- 大致流程如上,关键是VScode出现的时间较短,同时版本更新快,功能变动较大,因此有些官方文档已经快要过时了。希望微软能够在更新VScode的时候,将配套的文档一起更新完备
 
0x07 参考链接
Building your C++ application with Visual Studio Code
Integrate with External Tools via Tasks
February 2017 (version 1.10)
Configuring launch.json for C/C++ debugging
文章评论