《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)
Posted Bruceoxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)相关的知识,希望对你有一定的参考价值。
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 对于操作系统平台及硬件平台支持,概括起来就是一句话:无所不在。
(3) make:make工具用以简化编译过程,当编译一个包括成百上千个文件的大型项目时,逐个文件编译繁琐且低效,并且当更新某个文件之后,还需要重新再编译一次。makefile文件正是为解决此类问题而诞生的。现在绝大多数IDE,包括Window下的VS等IDE均使用makefile文件,只不过由系统自动生成,编程人员感觉不到而已。make工具的使用关键在于编写makefile文件。
以上软件都是开源免费的,随便你玩!
1 Visual Studio Code安装
1.根据使用的操作系统,直接从 Visual Studio Code 官网下载安装最新版。
安装很简单,将code_1.59.1-1629375198_amd64.deb拷贝到Ubuntu中。
$ sudo dpkg -i code_1.59.1-1629375198_amd64.deb
安装完成后,在文件夹/usr/share/applications有Visual Studio Code快捷方式文件,可将其拖到侧边栏,就可以在快捷方式中打开软件。
打开界面如下:
2.打开 VS Code,点击 “Extensions” 图标,搜索 C/C++ 插件(由 Microsoft 提供),点击安装。
3.安装中文插件。
重启应用,Visual Studio Code就是中文界面了。
如果有需要可以安装VS Code自带的编译器。
2编译工具安装
前面安装的Visual Studio Code只能说是一个代码编辑器,而编译代码需要编译器,Linux系统的编译器是GCC。安装命令如下:
$ sudo apt-get install gcc
然后在命令窗口中输入下面的命令验证安装是否成功:
$ gcc -v
对于单个文件, 使用GCC编译就行,但是对于大型的工程,就需要写Makefile来管理工程,这就需要一个工具来识别Makefile文件,也就是make工具。
在安装make工具之前,先来看看什么是makefile?Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。
在Linux安装make很简单,使用apt-get即可。
$ sudo apt-get install make
安装完成后,可查看make的版本信息。
3使用Visual Studio Code开发C/C++
3.1创建新的工程项目
选择一个文件夹,空白的即可。然后在VS Code中选择该文件夹即可。
最后创建的工程如下:
3.2配置工程
接下来就是配置工程。
配置c_cpp_properties.json
c_cpp_properties的作用是配置代码的智能语法辅助功能。
打开c_cpp_properties.json配置文件,输入以下内容:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/include",
"${workspaceFolder}"
],
"defines": [
],
"compilerPath": "/usr/bin/gcc",
"intelliSenseMode": "gcc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}"
]
}
}
],
"version": 4
}
name:这是用于标记使用的平台的标签。除了Linux还可以选Win32或Mac。也就是说,这个json里“configuration“下可以写三组配置,只要每组配置前面写上不同的平台,即可在不同的操作系统上使用就会自动适配不同的配置。
includePath:头文件路径。第一个目录是C语言标准库的目录, 剩下的几个目录直接从Makefile里复制然后稍微修改下即可。"${workspaceFolder}"表示项目文件夹;
defines:全局宏定义,这里的宏定义只写在源码中。VS Code只是一个编辑器,它检查代码的时候并不会去读makefile,因此有些宏定义需要自行配置。
compilerPath:编译器的路径。
intelliSenseMode:因为我用的是gcc所以选gcc-x64。
browse:源文件搜索路径。用来做代码补全和查找定义的。这个路径和includePath不同,browse.path是自动递归所有子目录的。而include.path默认只看本目录。
配置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}"
],
"problemMatcher": "$gcc",
"options": {
"cwd": "${workspaceFolder}"
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
type: 任务类型。任务执行的是shell命令。
label: 任务名。launch.json调用就是使用这个名字,注意是大小写区分的。
command: 任务的执行命令,这是执行的是gcc。
args: 任务的参数。也就是执行命令所带的参数。也就是上述命令gcc所带的参数。
problemMatcher: 错误捕获,这里使用gcc捕获错误。
配置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}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
}
]
}
name:调试的名称。
type:调试类型,除使用msvc进行调试外,均为该类型
request:可以选launch或attach。launch是指启动调试时同时开始执行程序;attcah是指程序已经在运行了,然后开始调试。
program: 指定C/C++程序位置。
cwd: 指定工作目录。
preLaunchTask:在启动调试前,预先执行的任务。
3.3调试
直接按F5,进入调试界面。调试界面如下:
界面左边可以看到变量窗口、调用堆栈等。窗口中间就是单步调试的各个按钮。这个就没啥好说的了,赶紧去玩起来吧。
除了使用Visual Studio Code自带的调试工具外,还可以使用MinGW的GDB调试,GDB也属于GNU项目的一部分,跟在Linux上调试是一样的。
GDB常用命令如表所示。
首先使用gcc编译代码,需要加‘-g’参数,这里和在Linux中调试是一样的。
在 gdb 中键入"l"(list)就可以查看所载入的文件,如下所示。
关于GDB的使用请看笔者文章:
GDB调试
3.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}"
],
"problemMatcher": "$gcc",
"options": {
"cwd": "${workspaceFolder}"
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
可以看到,相比当个文件,多个文件的配置也就是在args参数中添加相关的依赖文件。
接下来调试下。
从调试结果来看,这是完全没有问题的。
但是如果有很多文件,换个其他环境,这种方式显然是不具有通用性的,这里就需要使用Makefile来管理工程文件。
【Makefile】
##编译工具
CC = gcc
##Windows平台删除需要用del
win =
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
值得注意的是,在makefile中,命令行要以tab键开头,在windows下和linux下,可能由于编辑器不同,这里需要注意下,不然可能会报‘missing separator. Stop’的错误。
要想使用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,在每次调试前需要清理前一次编译的结果。
同样能调试。
当然啦,还可以使用GDB调试。
当然啦,这里也可以使用cmake来管理工程,有兴趣的可以去研究。
欢迎访问我的网站
BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎
欢迎订阅我的微信公众号
以上是关于《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)的主要内容,如果未能解决你的问题,请参考以下文章
软件测试 | 手把手教你如何使用 ABD调试工具,学不会算我的!
visual studio除了6还有哪个版本用得多而又不占内存?如何实现多visual studi