夏天/isummer

Sun of my life !Talk is cheap, Show me the code! 追风赶月莫停留,平芜尽处是春山~

博客园 首页 新随笔 联系 管理

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

 

posted on 2022-05-08 00:59  夏天/isummer  阅读(12466)  评论(0编辑  收藏  举报