《软件工具》手把手教你使用Visual Studio Code开发C/C++(Windows)

Posted Bruceoxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《软件工具》手把手教你使用Visual Studio Code开发C/C++(Windows)相关的知识,希望对你有一定的参考价值。

C/C++的开发工具很多,微软的Visual Studio,QT等都是不错的选择,但是这些IDE都过于庞大,而且有很多IDE都是收费的。笔者这里推荐GCC+Make+代码编辑器的方式来开发C/C++,该方式不仅适用于PC端,还适用于嵌入式。

接下来说说需要那些软件吧。

(1) VSCode:超好用的编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、Git 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux,运行流畅,可谓是微软的良心之作,也是本文要重点介绍的。

(2) GCC:GCC是GNU操作系统的官方编译器。已经被大多数类Unix操作系统采纳为标准的编译器。GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于操作系统平台及硬件平台支持,概括起来就是一句话:无所不在。针对Windows平台的GCC就是MinGW。

(3) Git:代码管理工具,但是我们这里要使用的是下载git附带的git bash。这个bash是基于mingw的,非常轻量,甚至于make都没有,但是可以安装相应的插件来支持make,wget等工具。
以上软件都是开源免费的,随便你玩!

1 Visual Studio Code安装

Visual Studio Code安装非常简单。

1.根据使用的操作系统,直接从 Visual Studio Code 官网下载安装最新版。

下载地址

安装很简单,这里就不在赘述了。

2.打开 VS Code,点击 “Extensions” 图标,搜索 C/C++ 插件(由 Microsoft 提供),点击安装。

如果有需要可以安装VS Code自带的编译器。

3.安装中文插件。

重启应用,Visual Studio Code就是中文界面了。


2 GCC编译工具

前面安装的Visual Studio Code只能说是一个代码编辑器,而编译代码需要编译器,Linux系统的编译器是GCC,而Windows的C/C++编译器是Microsoft Visual C++,那么要想在Windows也能GCC等一系列编译工具,就需要安装MinGW。

Microsoft Visual C+

MinGW 地址

MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物一般是原生 Windows 应用,虽然它本身不一定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。说的通俗点,MinGW就是你在Windows下使用GNU工具链的一个编译工具。

MinGW下载地址

进入下载页面。

【注】下载压缩包,不要下载离线安装的版本,而且安装难度较大,这里要选择非安装版本。

这就是压缩包,下载解压,直接配置下环境变量就可以使用。

然后在命令窗口中输入下面的命令验证安装是否成功:

#gcc -v 

3 make工具安装

对于单个文件, 使用GCC编译就行,但是对于大型的工程,就需要写Makefile来管理工程,这就需要一个工具来识别Makefile文件,也就是make工具,在Windows中没有直接可用的安装包,需要安装第三方的make工具。

在安装make工具之前,先来看看什么是makefile?Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。

本文的make工具是依赖Git工具的,我相信很多朋友都用过Git,但是很少使用Git的make等功能。
Git的bash实际上也就是一个mingw,是可以支持部分Linux指令的,但是只有少部分。在编译代码的时候经常会使用make命令反而在bash下默认是不支持的。

Make工具下载地址

下载make-4.1-2-without-guile-w32-bin.zip 文件。

把该文件进行解压,把解压出来的文件全部拷贝的git的安装目录下:

C:\\Program Files\\Git\\mingw64

把文件夹进行合并,如果跳出来需要替换的文件要选择不替换。

这样在git bash窗口下就可以执行make了。

没有安装Git先安装Git工具。

Git下载地址


4使用Visual Studio Code开发C/C++

4.1创建新的工程项目

选择一个文件夹,空白的即可。然后在VS Code中选择该文件夹即可。

最后创建的工程如下:

4.2配置工程

接下来就是配置工程。

配置settings.json

点击“在.vscode/settings.json中编辑",修改为自己安装git bash的路径:

"terminal.integrated.shell.windows": "C:\\\\Program Files\\\\Git\\\\bin\\\\bash.exe"

打开终端,就可以使用Bash了。

配置c_cpp_properties.json

c_cpp_properties的作用是配置代码的智能语法辅助功能。

打开c_cpp_properties.json配置文件,输入以下内容:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "D:/gcc/mingw64/include",
                "${workspaceFolder}"
            ],
            "defines": [
                
            ],
            "compilerPath": "D:/gcc/mingw64/bin/gcc.exe",
            "intelliSenseMode": "gcc-x64",
            "browse": {
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": "",
                "path": [
                    "${workspaceFolder}"
                ]
            }
        }
    ],
    "version": 4
}

name:这是用于标记使用的平台的标签。除了win32还可以选Linux或Mac。也就是说,这个json里“configuration“下可以写三组配置,只要每组配置前面写上不同的平台,即可在不同的操作系统上使用就会自动适配不同的配置。

includePath:头文件路径。第一个目录是C语言标准库的目录, 剩下的几个目录直接从Makefile里复制然后稍微修改下即可。"${workspaceFolder}"表示项目文件夹;

defines:全局宏定义,这里的宏定义只写在源码中。VS Code只是一个编辑器,它检查代码的时候并不会去读makefile,因此有些宏定义需要自行配置。

compilerPath:编译器的路径。

intelliSenseMode:因为我用的是gcc所以选gcc-x64。

browse:源文件搜索路径。用来做代码补全和查找定义的。这个路径和includePath不同,browse.path是自动递归所有子目录的。而include.path默认只看本目录。

c_cpp_properties配置说明


配置tasks.json

tasks.json文件的作用是配置编译任务,如果没有则需要创建tasks.json文件,内容如下:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "gcc",
            "args": [
              "-g",
              "${file}",
              "-o",
              "${fileDirname}\\\\${fileBasenameNoExtension}.exe"
            ],
            "problemMatcher": "$gcc",
            "options": {
              "cwd": "${workspaceFolder}"
            },
            "group": {
              "kind": "build",
              "isDefault": true
            }
        }
    ]
}

type: 任务类型。任务执行的是shell命令。
label: 任务名。launch.json调用就是使用这个名字,注意是大小写区分的。
command: 任务的执行命令,这是执行的是gcc。
args: 任务的参数。也就是执行命令所带的参数。也就是上述命令gcc所带的参数。
problemMatcher: 错误捕获,这里使用gcc捕获错误。

Tasks配置说明


配置launch.json

在vscode文件夹中新建一个launch.json,该文件是调试的入口文件。内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
          "name": "gcc.exe - Build and debug active file",
          "type": "cppdbg",
          "request": "launch",
          "program": "${fileDirname}\\\\${fileBasenameNoExtension}.exe",
          "args": [],
          "stopAtEntry": false,
          "cwd": "${workspaceFolder}",
          "environment": [],
          "externalConsole": false,
          "MIMode": "gdb",
          "miDebuggerPath": "D:/gcc/mingw64/bin/gdb.exe",
          "setupCommands": [
            {
              "description": "为 gdb 启用整齐打印",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
            }
          ],
          "preLaunchTask": "build"
        }
      ]
}  

name:调试的名称。
type:调试类型,除使用msvc进行调试外,均为该类型
request:可以选launch或attach。launch是指启动调试时同时开始执行程序;attcah是指程序已经在运行了,然后开始调试。
program: 指定C/C++程序位置。
cwd: 指定工作目录。
preLaunchTask:在启动调试前,预先执行的任务。

launch.json参考

4.3调试

直接按F5,进入调试界面。调试界面如下:

界面左边可以看到变量窗口、调用堆栈等。窗口中间就是单步调试的各个按钮。这个就没啥好说的了,赶紧去玩起来吧。

除了使用Visual Studio Code自带的调试工具外,还可以使用MinGW的GDB调试,GDB也属于GNU项目的一部分,跟在Linux上调试是一样的。

GDB常用命令如表所示。

首先使用gcc编译代码,需要加‘-g’参数,这里和在Linux中调试是一样的。

在 gdb 中键入"l"(list)就可以查看所载入的文件,如下所示。

关于GDB的使用请看笔者文章:

GDB使用

值得注意的是,使用MinGW的GDB调试时,使用powershell终端和Git bash都是一样的。

4.4多文件编译与调试

前文的工程都是单文件的,在实际工程中,都是会有很多文件,甚至有很多文件夹。
笔者这里新建main.c、fun.c和fun.h文件。文件内容分别如下。
【main.c】

/**
  ******************************************************************************
  * @file                main.c
  * @author              BruceOu
  * @version             V1.0
  * @date                2021-09-06
  * @blog                https://blog.bruceou.cn/
  * @Official Accounts   嵌入式实验楼
  * @brief               
  ******************************************************************************
  */
/**Include*********************************************************************/
#include "fun.h"

/**
  * @brief  main
  * @param  None
  * @retval int
  */
int main()
{
    int num = 100;

    fun_print_int(num);

    return 0;
}

【fun.c】

/**
  ******************************************************************************
  * @file                fun.c
  * @author              BruceOu
  * @version             V1.0
  * @date                2021-09-06
  * @blog                https://blog.bruceou.cn/
  * @Official Accounts   嵌入式实验楼
  * @brief               fun
  ******************************************************************************
  */
/**Include**********************************************************************/
#include "fun.h"

/**
  * @brief  print number
  * @param  num
  * @retval None
  */
void fun_print_int(int num)
{
    printf("fun print int: %d\\n", num);
}

【fun.h】

#ifndef _FUN_H_
#define _FUN_H_

#include "stdio.h"

void fun_print_int(int num);

#endif

如果遇到多个文件,这就需要将main.c中包含的xxx.h文件和xxx.c源文件包含到GCC的编译参数中,也就是tasks.json文件。

【tasks.json】

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "gcc",
            "args": [
              "-g",
              "${file}",
              "${fileDirname}/fun.c",
              "-o",
              "${fileDirname}\\\\${fileBasenameNoExtension}.exe"
            ],
            "problemMatcher": "$gcc",
            "options": {
              "cwd": "${workspaceFolder}"
            },
            "group": {
              "kind": "build",
              "isDefault": true
            }
        }
    ]
}

可以看到,相比当个文件,多个文件的配置也就是在args参数中添加相关的依赖文件。

接下来调试下。

从调试结果来看,这是完全没有问题的。

但是如果有很多文件,换个其他环境,这种方式显然是不具有通用性的,这里就需要使用Makefile来管理工程文件。

【Makefile】

##编译工具
CC = gcc

##Windows平台删除需要用del
#使用powershell需要打开,使用Git Bash需要注释该语句
win = yes

TARGET = main
SOURCE = *.c

#
CPPFLAGS = -I.
CFLAGS = -g -Wall -o2

obj:
    $(CC) $(CPPFLAGS) $(CFLAGS) -o $(TARGET) $(SOURCE)

## clean
clean:
ifdef win
    del $(TARGET).exe
else
    rm  $(TARGET)
endif

.PHONY: clean

值得注意的是,如果想要powershell终端也能使用make,那么就需要配置make的环境变量。

要想使用Visual Studio Code调试,还需要修改tasks.json文件。
【tasks.json】

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "build",
            "command": "make",
            "args": [
              "-j4"
            ],
            "dependsOn":"clean"
        },
        {
          "type": "shell",
          "label": "clean",
          "command": "make",
          "args": [
            "clean"
          ]
      }
    ]
}

tasks.json新建了两个任务,一个是make任务,一个是clean任务,make任务依赖clean,在每次调试前需要清理前一次编译的结果,不然只有Git Bash能使用功能make。

同样能调试。

当然啦,还可以使用GDB调试。

和使用Git Bash是一样的,只是这里使用的make编译的工程。

当然啦,这里也可以使用cmake来管理工程,有兴趣的可以去研究。




欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


欢迎订阅我的微信公众号

以上是关于《软件工具》手把手教你使用Visual Studio Code开发C/C++(Windows)的主要内容,如果未能解决你的问题,请参考以下文章

软件测试 | 手把手教你如何使用 ABD调试工具,学不会算我的!

苏州程序大白手把手教你Visual Studio 远程调试

visual studio除了6还有哪个版本用得多而又不占内存?如何实现多visual studi

HarmonyOS - 手把手教你搭建Artifactory

研发课堂丨手把手教你添加i.MX6UL对curl软件的支持

研发课堂丨手把手教你添加i.MX6UL对curl软件的支持