Ricky Hao

VScode Windows下配置Visual Studio编译C++

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 Studiovcvars64.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
  • 第六行的%2tasks.json传入的第二个参数,也就是当前打开文件的相对路径。
  • 第七行的del用于删除编译过程中产生的obj文件,%3tasks.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

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据