基于VSCode的C/C++编程语言的构建调试环境搭建指南

VScode的C/C++环境配置

安装VScode

首先下载安装VScode,开源软件首推官网下载https://code.visualstudio.com/,Linux中使用的话选择下载.deb文件,之后执行(根据文件名称自行修改指令)
sudo dpkg -i code_1.42.1-1581432938_amd64.deb

安装C/C++插件

打开VScode,Ctrl+Shift+P,输入指令Preferences:Language Extensions安装C/C++模块

保证已安装GCC编译器和GDB工具

VScode只是一个文档的编辑器,本身不具备编译和调试功能,编译和调试需要调用外部程序进行,比如GCC编译器和GDB工具。GCC和GDB在Linux系统中一般会默认安装,可以通过如下指令查看版本信息确认是否安装

gcc -v
gdb -v

如果都没有安装,可以通过如下指令安装GCC和GDB

GCC安装

GCC官方安装教程(https://gcc.gnu.org/install/),从源代码开始生成安装。
Ubuntu中也可以使用如下指令安装:

  1. sudo apt install gcc
  2. sudo apt install build-essential

    GDB安装

  3. 下载GDB源码,官网(http://ftp.gnu.org/gnu/gdb/)自行选择版本
  4. 下载后用tar -zxvf命令解压文件
  5. 进入解压后的文件夹,使用命令./configure生成makefile文件
  6. 执行make指令(耗时较久,耐心等待)
  7. sudo make install

    准备源码以及相关配置文件launch.json和task.json

    launch.json和task.json可以由VScode默认生成再自己调整细节,也可以自己通过如下命令直接编写:
mkdir .vscode
cd .vscode
vim launch.json
vim task.json

笔者学习过程自己随手写了如下一个简单的hello.cpp文件:

#include <iostream>
using namespace std;

void xx(int& a){
    ++a;
}

int main(){
    int x=0;
    while(x<3){
        xx(x);
    }
    if(x==3)
        cout<<"Hello World!"<<endl;
    return 0;
}

该程序只是简单的将x自增到3然后输出“Hello World!”;
launch.json和task.json则使用默认生成的文件再进行微调:
launch.json文件内容如下:

{
    // 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": "execute hello world",
            "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": "build hello world", //一定要和task.json中某一tasks的label标签内容一致
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

task.json文件内容如下:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build hello world",
            "type": "shell",
            "command": "make",
            "args":["-s"]
        }
    ]
}

task.json中调用了make命令需要makefile文件,内容后续再说明。

VScode的简单调试说明

F5开始调试,Ctrl+F5执行不调试,调试中F5继续执行,F10执行一步,F11步入函数,Shift+F11跳出函数,Ctrl+Shift+F5重新开始,Shift+F5结束调试。
VScode调试界面说明:

输出结果:

Makefile文件

Makefile概述

Makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,例如Linux下的GNU make。

Makefile简单实例

笔者的Makefile文件内容如下:

hello: hello.o 
    g++ hello.o -o hello
hello.o:hello.cpp
    g++ -g -c hello.cpp

.PHONY:clean
clean:
    rm -f hello hello.o

Makefile文件说明

targets : prerequisites
    command

targets是要生成的目标文件,prerequistites是依赖文件,command是生成该文件指定的需要执行的命令。makefile中的第一个targets作为默认执行目标。一般而言,会以Unix标准Shell(/bin/sh)来执行命令。
其中的依赖关系可以由gcc自动生成:

  1. gcc中-M参数会列出所有的依赖关系
  2. gcc中-MM参数会列出所有不是标准库的依赖关系.

    伪目标

    .PHONY:clean表明clean是一个伪目标,可以理解为一个锚点,在执行make命令时可以通过"make clean"来调用目标clean的指令。(Ps:clean一般会写在最后)

    make命令部分参数介绍

    1. -n参数按顺序输出所有需要执行的命令但不执行;
    2. -s参数会不输出任何说明的执行所有命令;
    3. -w参数会在输出原有命令的基础之上输出访问推出文件夹的信息.

Ps:以上内容只是笔者在此次搭建过程中涉及到的内容说明,Makefile还有更多更深的内容需要慢慢了解和学习,作为一个方便程序员的工具,它具有非常强大的生命力。与此同时也存在很多自动生成Makefile文件的工具,例如Cmake,autotools等,在使用中也会极大方便我们。
自己手动编写Makefile虽然耗时更久,但是对于整个过程会有一个更好的把握,在遇到问题需要debug的时候可以更加得心应手;而合理运用自动化工具,可以提供更高的效率。鱼和熊掌不可兼得,在实际应用中还需要根据情况自行判定。

猜你喜欢

转载自www.cnblogs.com/ustcweijf/p/12543483.html