ubuntu 20.04系统下安装VSCode(配置C/C++开发环境)
1. 下载VSCode
方法1:通过ubuntu的软件下载中心,进行图形化下载安装,比较简单。
方法2:通过官网,下载最新版本的安装文件,
下载地址https://code.visualstudio.com/download
对于Ubuntu,则选择.deb版本,下载code_1.67.0-1651667246_amd64.deb,
在ubuntu 系统下,执行以下命令:
sudo apt install ./code_1.67.0-1651667246_amd64.deb
然后执行更新包缓存:update the package cache ,
sudo apt update
2. 打开VSCode,安装C/C++的开发扩展
(1) Ctrl+Shift+X安装C/C ++扩展,
(2)安装GCC(GNU 编译器套件)
这样可以为VSCode 提供用g++指令来编译C/C++的源码文件,同时还可以提供gdb指令来进行debug调试。这些功能模块并不在Ubuntu中默认安装,因此需要单独安装。
首先查看Ubuntu是否具备gcc在系统中存在,执行命令如下:
gcc -v
如果没有安装,则提示该命令找不到。如果安装,则会输出安装的gcc的版本。
如果gcc没有安装,运行以下命令:
1. 更新Ubuntu package list
sudo apt-get update
2. 安装GNU编译工具,以及安装GDB的调试助手
sudo apt-get install build-essential gdb
3. 测试HelloWorld
(1) 在终端新建一个工程文件夹,然后创建一个项目文件夹,在文件夹内部打开VisualStudio Code
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
这样可以在helloworld文件夹下打开VSCode,这样helloworld文件夹就是WorkSpace工作区。
新建helloworld.cpp文件,并写入以下代码:
#include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; for (const string& word : msg) { cout << word << " "; } cout << endl; }
在VSCode的状态栏中看到 RunC++,点击,则在输出窗口输出以下状态,该命令工具为:
g++ /.../helloworld.cpp -o /.../helloworld
并运行该程序,输出以下结果:
生成可执行文件helloworld
以上的运行C++程序,并没有执行VSCode的Build的步骤。
3. 用VSCode进行Build Task的配置文件
需要创建tasks.json文件,来高速VSCode怎样编译该程序,该task将会调用g++编译器来创建可执行的文件。
需要确保需要编译的文件处于激活状态,这样编辑的task就是针对当前激活的源码文件。
在Terminal菜单中,选中“Configure Default Build Task.“,选中C/C++:g++ build achive file (用g++构建激活的文件)
这样就会创建一个taks.json文件在.vscode文件夹中,可以通过打开编译器中查看,初始内容如下:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ build active file", "command": "/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "compiler: /bin/g++" } ] }
其中,
commands关键字用来执行语和女性的程序,此处是/usr/bin/g++的编译器
args关键字对应的值,是用于命令command的命令选择项,其中-o表示输出【预处理->编译->汇编->连接生成】可执行文件(路径+文件名)。注意,这些命令参数必须参考g++指令来进行配置。
该task中$(file)用来表示当前激活的文件名称, 生成的可执行文件的目录由$(fileDirname),也是由当前激活的文件所在的目录确定,$(fileBasenameNoExtension)表示当前激活的文件的文件名称,但是不包含扩展名。因此,该task的输出可执行文件为helloworld
label 关键字是用于在taks列表中展示的可以看到的信息, 你可以自由定义该tak的用图。
group关键字对应的vale中的”isDefault“配置为true,用来指明该taks将自动执行,当你按下Ctrl + Shift + B,该配置非常方便,该属性如果设置为false,则需要在terminal 菜单中:Task:Run Build Task执行当前的task任务。。
4. 运行该Build的操作
(1)需要重新回到编辑框,并打开需要编译的c++文件。
(2)通过快捷键方式,运行该源码build的task文件, Ctrl+Shift+B, 或者在Terminal 菜单中点击:Run Build Task
可以看到下图, 执行Build操作成功的结果:
> Executing task: C/C++: g++ build active file, writen by icmzn mark < Starting build... /bin/g++ -fdiagnostics-color=always -g /home/nanhua/WorkSpace_VSCode/Projects/helloworld/helloworld.cpp -o /home/nanhua/WorkSpace_VSCode/Projects/helloworld/helloworld Build finished successfully. Terminal will be reused by tasks, press any key to close it.
执行Build Task 后生成的可执行文件, 通过ls指令,可以查看生成的可执行文件helloworld,没有扩展名。
如下,并在Terminal终端中执行该可执行文件,当前的terminal则工作目录就是源码helloworld.cpp所在文件夹。
执行如下命令:
./helloworld
如下图:
此外,还可以通过配置tasks.json中,修改"${workspaceFolder}/*.cpp"
替换 ${file},这样可以同时编译多个C++文件。
5. Debug源码文件配置launch.json
在.vscode文件夹下,需要创建launch.json文件,该文件是用来当按下F5时,用来配置VSCode 启动gdb调试器(Launch the gdb debugger)。
点击菜单:Run->Add Configuration, 这样VSCode将会创建一个空的launch.son文件。
如下launch.json
{ "version": "0.2.0", "configurations": [ { "name": "g++ build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "g++ build active file", "miDebuggerPath": "/usr/bin/gdb" } ] }
在以上的json文件中,program关键字用来配置采用debug的程序,此处是生成的可执行目标文件。这里是用来设置激活文件所在的文件夹$(fileDirname),以及激活文件没有扩展名的文件名$(fileBasenameNoExtension),此处是helloworld
miDebuugerPaht是配置调试需要的系统的gdb指令程序所在的位置,可以通过which gdb 查看即可。
args:关键字是用来传递给测试调试程序的参数;此处为空的数组[],即不用来进行传递。
cwd 关键参数是Current Working Director 目标当前工作的目录,值为:$(WorkspaceFolder)。
externalConsole关键参数是用来配置是否使用外部的终端控制台,此处配置false,即采用VisualCode集成的控制台。
preLaunchTask:关键参数,是用来配置在启动debug之前,需要启动的launchTask,此处配置的值为:task对应的label标签。这样二者可以匹配起来。
默认情况下,C++扩展将不会在源码文件中添加断点,因此stopAtEntry关键字配置为false。如果配置为true,则将会指导调试器debugger在main方法开始的地方暂停。
配置经验:
一定要把launch.json中的 preLaunchTask配置值,配置为 tasks.json文件中的label中的值,二者匹配起来,才能debug的时候,先启动task.json,然后启动launch.json的debug操作。
6. 启动debug的操作
重新回到编译的源码文件,并在编辑器中打开该文件;
按下F5,或者从菜单Run -> Start Debugging 即可启动,但是还是需要关注以下几点变化:
配置stopAtEntry关键字为true,则VSCode则自动在main的入口停止,可以通过调试工具F10,F11,F9进行调试。
同时,在变量检测窗口,输入响应的变量,可以看到对应的变量状态变化。
按下F5,则程序调试结束,在Terminal终端,输出以下结果:
7. C/C ++ 配置,
如果需要控制多个c/C++的扩展, 可以通过创建c_cpp_properties.json文件,这样用来配置,包括:指向编译器的路径,包含路径,C++标准(默认是C++17)等等。
可以通过图形UI进行该文件的生成,通过在命令面片(Command Palette, Ctrl+Shift+P快捷键打开),输入:C/C++: Edit Configurations (UI),如下操作
打开C/C++ Edit Cofiguration (UI) 配置页如下,通过对UI的任何操作,都实时反应到生成的.vscode文件夹下的c_cpp_properties.json文件中。
如果仅仅需要修改include path 设置,如果需要包含相关的头文件的时候,而该头文件没有在workspac或者没有在标准库路径standard library path。
自动生成如下配置文件c_cpp_properties.json
8. 重复使用C++的配置文件
经过上述配置,则可以在linux系统上,利用vscode进行编译c/C++程序。所有的配置文件./vscode下的配置文件,应用于当前的工作目录。
可以通过对./vscode文件夹下的所有配置文件进行拷贝,到新的工作目录(workspace),并根据实际需要,更新soucr files和可执行文件,即可。
9. 出现的问题
(1)如果出现:undefined _main
, or attempting to link with file built for unknown-unsupported file format
是由于当前active 的文件,不是c/c++源码文件。
参考博客:
https://code.visualstudio.com/docs/setup/linux