Ubuntu 16.04配置VSCode编译C++

前言

很多免费IDE我用着不顺手。
好用的CLion要钱。
VSCode不二之选。
Ubuntu 16.04配置VSCode编译C++_第1张图片界面跟Windows一模一样的界面,支持的语言还不少,微软自家开发的几个插件就很好用,还有很多第三方插件。对新手还算友好。
除此之外,最赞的就是,即使你从命令行启动vscode,它也不会就占用你一个命令行窗口,vscode打开以后,命令行将会直接返回,此时你可以使用这个命令行做其他的事情。
而我们看看kDevelop,如果你从命令行启动,这个窗口将会是这样…
Ubuntu 16.04配置VSCode编译C++_第2张图片

配置

首先我们打开vscode。我的建议是从命令行打开。
首先你需要新建一个工程目录,比如就叫template
然后你需要做的是在此目录中打开vscode

mkdir template
code template/

如果找不到code这个命令,可能安装有问题。

launch.json

VSCode的debug配置,都是通过json文件完成的,就跟上面这张图一样。
需要配置的json文件一共有两个,launch.json和tasks.json
我们先看launch,json

要使用调试的话只需要点击Debug下面的Start Debugging,或者直接按F5
Ubuntu 16.04配置VSCode编译C++_第3张图片
如果已经配置过了,这时就直接开始调试了。如果你还没有配置过,选择C++(GDB/LLDB),这是应该会弹出一个默认的launch.json模板,就像这样
Ubuntu 16.04配置VSCode编译C++_第4张图片
Ubuntu 16.04配置VSCode编译C++_第5张图片
这是默认的代码

{
	// 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": "(gdb) Launch",
			"type": "cppdbg",
			"request": "launch",
			"program": "enter program name, for example ${workspaceFolder}/a.out",
			"args": [],
			"stopAtEntry": false,
			"cwd": "${workspaceFolder}",
			"environment": [],
			"externalConsole": true,
			"MIMode": "gdb",
			"setupCommands": [
				{
					"description": "Enable pretty-printing for gdb",
					"text": "-enable-pretty-printing",
					"ignoreFailures": true
				}
			]
		}
	]
}

这个文件我们需要关注的点只有两个。
首先是你的可执行文件的路径。

"program": "enter program name, for example ${workspaceFolder}/a.out",

这里模板中提示输入可执行文件的路径,给了一个例子${workspaceFolder}/a.out,这个${workspaceFolder}就是工程目录,在我这里就是template。这个a.out就是个g++默认选项下生成的可执行文件名称。我们将这句话改成自己的可执行文件路径就行了。
如果你说我还没有可执行文件,可以等下再配置这个
其次是你需要在下面添加配置preLaunchTask,就像这样

"preLaunchTask": "build"

这个是可以自动补全的,改完大概是这样

{
	// 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": "(gdb) Launch",
			"type": "cppdbg",
			"request": "launch",
			"program": "${workspaceFolder}/build/a.out",
			"args": [],
			"stopAtEntry": false,
			"cwd": "${workspaceFolder}/build",
			"environment": [],
			"externalConsole": true,
			"MIMode": "gdb",
			"setupCommands": [
				{
					"description": "Enable pretty-printing for gdb",
					"text": "-enable-pretty-printing",
					"ignoreFailures": true
				}
			],
			"preLaunchTask": "build"
		}
	]
}

即在调试开始前要进行的任务。为了gdb能够调试,我们要确保调试开始前已经生成了可执行文件,这个make就是一个生成可执行文件的过程,稍后我们会进行配置。

tasks.json

如果你使用G++

使用快捷键Ctrl+Shift+P,选择Tasks: Configure Task没有的话可以搜索,然后依次选择下面的项

Ubuntu 16.04配置VSCode编译C++_第6张图片
在这里插入图片描述
Ubuntu 16.04配置VSCode编译C++_第7张图片
此时弹出一个默认的tasks.json,代码如下

{
	// See https://go.microsoft.com/fwlink/?LinkId=733558
	// for the documentation about the tasks.json format
	"version": "2.0.0",
	"tasks": [
		{
			"label": "echo",
			"type": "shell",
			"command": "echo Hello"
		}
	]
}

解释一下,这是任务配置文件,默认情况下这里只有一个任务

			"label": "echo",

这里配置这个任务的名字,这里给出一个默认的名字echo,你可以改成你想要的名字,比如我这里叫build,这个名字是为了让之前的launch.json文件能够知道你要运行哪个任务

			"type": "shell",

这个说明该任务在shell中运行,不用改

			"command": "echo Hello"

这是这个任务运行的指令,例如这个默认的就是在命令行中显示Hello

我们要使用g++编译你的源代码,我们假设你的源代码为main.cpp,则g++的编译命令为

g++ main.cpp

这将在你的工程目录下生成一个a.out文件,如果需要定义更多操作,请自行查询g++的文档。
这条命令包含一个参数main.cpp,因此我们需要把参数添加到tasks.json中,完成以后是这样

{
	// See https://go.microsoft.com/fwlink/?LinkId=733558
	// for the documentation about the tasks.json format
	"version": "2.0.0",
	"tasks": [
		{
			"label": "build",
			"type": "shell",
			"command": "g++",
			"args": [
				"-std=c++11",
				"-g",
				"main.cpp"
			]
		}
	]
}

由于使用了C++11标准,因此需要把这也作为参数给到g++,即,我们这里使用的命令是

g++ -std=c++11 -g main.cpp

这样,如果你之前在launch.json中调用的任务名称与这里的label对应的名称一致,保存这两个json文件,你应该就能开始编译了

如果你使用CMake

使用CMake配置上会麻烦一点,但是当源代码文件比较多的时候,是比g++更好用的,很多其它的IDE都支持CMake。CMake生成可执行文件,包含两步,即cmake与make,并且你需要提前新建一个build目录用来存放cmake生成的文件。

由于tasks.json中的task一次只能运行一条命令,因此我们需要建两个task,task.json代码如下

{
	// See https://go.microsoft.com/fwlink/?LinkId=733558
	// for the documentation about the tasks.json format
	"version": "2.0.0",
	"tasks": [
		{
			"label": "cmake",
			"type": "shell",
			"options": {
				"cwd": "${workspaceFolder}/build"
			},
			"command": "cmake",
			"args": [
				"-DCMAKE_BUILD_TYPE=Debug",
				"${workspaceFolder}"
				// "..",
			],
		},
		{
			"label": "make",
			"type": "shell",
			"command": "make",
			"options": {
				"cwd": "${workspaceFolder}/build"
			},
			"dependsOn": [
				"cmake"
			]
		},
	]
}

这里包含cmake与make两个任务。由于cmake与make均需要在特定的目录下运行,因此我们需要给两个任务添加选项

"options": {
	"cwd": "${workspaceFolder}/build"
},

这表示cmake与make的命令需要在${workspaceFolder}/build目录下运行。

然后如何让这两个任务依次运行呢,我们在make任务中添加了依赖

"dependsOn": [
	"cmake"
]

表示在运行make之前,先运行cmake,这样就能够与我们使用CMake的一般过程相同

"args": [
	"-DCMAKE_BUILD_TYPE=Debug",
	"${workspaceFolder}"
	// "..",
],

此外需要注意的是,在cmake的参数中,我们添加了"-DCMAKE_BUILD_TYPE=Debug",如果缺少这一参数,我们是无法进行断点调试的。为此你还需要在你的CMakeLists.txt中加上

set(CMAKE_BUILD_TYPE Debug)

由此,VSCode就能够对C++进行断点调试了

效果

Ubuntu 16.04配置VSCode编译C++_第8张图片
我们可以看到程序停在了设置断电的第9行,你也可以在左边的监视窗口中添加变量

你可能感兴趣的:(Ubuntu 16.04配置VSCode编译C++)