VScode编译C++程序

本篇文章默认电脑已经安装好VScode软件,下面来简单叙述一下如何使用VScode做C++的代码编写、编译以及调试等工作。

配置C++环境

  1. 在vscode中下载C/C++插件
  2. 下载编译器
    vscode只是一个编辑器,本身并不具备代码编译功能,此处下载的是mingw-w64。
  3. 添加 Mingw-w64的bin文件夹到电脑环境变量中
  4. 检查MinGW是否安装成功
    打开电脑的cmd,输入下列两行命令
g++ --version
gdb --versionc

成功显示当前安装的编译器版本则成功添加环境变量

如果显示不能识别命令,则未成功安装,需要检查是否成功添加环境变量。

  1. 简单的编写一个cpp程序,接下来生成.vscode配置文件
  2. 生成tasks.json文件
    选择终端——配置默认生成任务(Terminal > Configure Default Build Task),在下拉列表中选择g++.exe build active file(这一步是选择编译时使用的编译器,由于使用的是MinGW,所以选择该编译器),选择完毕后,将自动生成.vscode文件夹,在文件夹中会自动生成tasks.json文件,文件中具体命令注释:
{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: g++.exe build active file",//任务名称,与launch.json的preLaunchTask相对应
            "command": "C:\\MinGW-w64\\mingw64\\bin\\g++.exe",//使用的编译器
            "args": [
                "-g",
                "${file}",
                "-o",//指定输出文件名,不加参数默认为a.exe,Linux下默认为a.out
                "${fileDirname}\\${fileBasenameNoExtension}.exe" //当前文件名(去掉拓展名)
            ],
            "options": {
                "cwd": "C:\\MinGW-w64\\mingw64\\bin"
            },
            "problemMatcher": [
                "$gcc" //使用gcc捕获错误
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
    ]
}

命令设置指定要运行的程序; 在这种情况下是g++。 args数组指定将传递给g++的命令行参数。 必须按照编译器期望的顺序指定这些参数。 此任务告诉g++获取活动文件($ {file}),对其进行编译,然后在当前目录($ {fileDirname})中创建一个与活动文件同名但扩展名为.exe($)的可执行文件。{fileBasenameNoExtension} .exe。

标签值(label)是您将在任务列表(tasks)中看到的内容;你可以随便给它取什么名字。

group对象中的“isDefault”:true值指定当您按Ctrl+Shift+B时将运行此任务。此属性仅为方便使用;如果将其设置为false,仍然可以从带有Tasks: run Build Task的终端菜单中运行它。

  1. 编译生成可执行文件,快捷键为(Ctrl + Shift + B)
    没有提示错误则生成成功,点击新建终端,输入dir可显示当前文件夹中的文件,会多出一个可执行文件(.exe)
    继续输入.\main.exe就可执行文件(文件名由生成的任务决定)
  2. 对程序进行Debug
    按F5,从菜单中选择C++(GDB/LLDB),接着选择g++.exe build and debug active file命令,vscode会自动在.vscode文件夹生成launch.json文件,文件具体命令注释:
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件", //配置名称,将会在启动配置的下拉菜单显示
            "type": "cppdbg",//配置类型,cppdbg对应cpptools提供的调试功能,可以认为此处只能是cppdbg
            "request": "launch",//请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",//将要进行调试的程序的路径
            "args": [],//程序调试时传递给程序的命令行参数
            "stopAtEntry": true,//设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${workspaceFolder}",//调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [],//环境变量
            "externalConsole": false,//为true时使用单独的cmd窗口,与其他IDE一致;18年10月后设为false可调用VSC内置终端
            "MIMode": "gdb",//指定连接的调试器,可以为gdb或lldb
            "miDebuggerPath": "C:\\MinGW-w64\\mingw64\\bin\\gdb.exe",//调试器路径,Windows下后缀不能省略,Linux下不需要
            "setupCommands": [
                {
                    //模板自带
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "g++.exe build active file"//调试会话开始前执行的任务,一般为编译程序,与tasks.json的label相对应
        }
    ]
}

program指定需要调试的程序,在这里,它被设置为活动文件文件夹$ {fileDirname}和扩展名为.exe的活动文件名(${fileBasenameNoExtension}.exe)。

默认情况下,C ++扩展不会在源代码中添加任何断点,stopAtEntry值设置为false。 将stopAtEntry值更改为true,以使调试器在启动调试时在main函数上停止。

  1. C/C++配置文件
    如果想要控制C/C++拓展,可以创建c_cpp_properties.json文件,它将允许更改设置,例如编译器的路径,包含路径,C ++标准(默认为C ++ 17)等
    可以从命令面板(Ctrl + Shift + P)编辑配置(UI)(C/C++: Edit Configurations (UI))来查看C / C ++配置UI,.vscode文件夹中将会自动生成c_cpp_properties.json文件。
{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "compilerPath": "C:\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gcc.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "clang-x86"
    }
  ],
  "version": 4
}

仅当程序包含不在工作空间(当前文件夹)或标准库路径中的头文件时,才需要添加到“Include path”设置中。

editorPath是配置中的重要设置。 该扩展使用它来推断C ++标准库头文件的路径。 当扩展知道在哪里可以找到那些文件时,它可以提供有用的功能,例如智能补全和“转到定义”导航。

使用vscode进行C++多文件的编译

用Vscode编译小的Cpp项目(包含多个文件)时,需要对tasks.json进行修改。

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "shell: g++.exe build active file",
			"command": "C:\\MinGW-w64\\mingw64\\bin\\g++.exe",
			"args": [
				"-g",
				"${fileDirname}\\*.cpp" , //多文件编译时使用此命令
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe"
			],
			"options": {
				"cwd": "C:\\MinGW-w64\\mingw64\\bin"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			}
		}
	]
}

args中的{fileDirname}\\*.cpp参数表示对当前文件中的所有cpp文件进行编译,则整个文件夹为一个工作区,只有一个main主函数,{file}只对当前单个文件进行编译,文件夹中可以有多个main函数。