【青鸟飞扬教育】Linux下 VS Code 安装与 C 编程环境配置!
创始人
2024-10-19 20:27:44
0

对于多文件的C项目,大部分人会选择使用'cmake'来管理编译过程,对于精力充沛的朋友来说,也可以学习一下使用这个强大的工具。

但我觉得如果只想在VS Code里写几行代码应对当前需求,没必要再去学习一个完全陌生的东西,也没必要把配置过程复杂化。

所以我接下来讲的配置多文件编译的过程并不涉及'cmake'。

目录模式

我将这种配置方式称为“目录模式”,跟Eclipse类似,每个目录作为一个项目。

在上一篇中我们讲了如何进行单文件的编译和调试,其中使用了VS Code提供的变量,以定位到当前文件。

同样地,我们只需要再使用VS Code提供的变量,定位到当前目录,再利用Linux Shell的通配符,即可匹配到当前目录下所有要编译的源文件。

gcc本身是支持多文件编译的,只需要把文件名作为参数即可。

配置好的tasks.json文件大致如下:

{

"version": "2.0.0",

"tasks": [

{

"type": "shell",

"label": "build(gcc)",

"command": "gcc",

"args": [

"-g",

"-o",

"/tmp/buildtempc",

"*.c" // 匹配所有源文件

],

"options": {

"cwd": "${fileDirname}" // 定位到当前目录

},

"group": {

"kind": "build",

"isDefault": true

}

}

]

}

配置好的launch.json文件大致如下:

{

"version": "0.2.0",

"configurations": [

{

"name": "debug(gdb)",

"type": "cppdbg",

"request": "launch",

"program": "/tmp/buildtempc",

"args": [],

"stopAtEntry": false,

"cwd": "${fileDirname}", // 定位到当前目录

"environment": [],

"externalConsole": false,

"MIMode": "gdb",

"setupCommands": [

{

"description": "Enable pretty-printing for gdb",

"text": "-enable-pretty-printing",

"ignoreFailures": true

}

],

"preLaunchTask": "build(gcc)",

}

]

}

注意:匹配源文件时一定要写成'*.c',而不能写成'*'。因为头文件不是编译单元,头文件在编译源文件时被处理。

在我的配置文件里,我将可执行文件放在了'/tmp'目录下,以使工作目录看起来简洁一些。

'.vscode'目录下的配置文件对工作空间下的所有目录和文件都是有效的,现在我们只需要新建一个目录,并在里面写好头文件和源文件,就可以编译和调试了。

目录模式有一些缺陷:

✿ 头文件和源文件放在一起会比较乱

✿ 项目变多的时候,工作空间会比较乱

✿ ‘C/C++’扩展会扫描工作空间内的所有文件,如果项目变多会降低扩展性能,也会使扩展功能混乱

授之以鱼不如授之以渔。
我强烈建议不要直接复制我的配置文件,而是要理解每个配置选项的意义和目的,从而写出符合个人喜好的配置。

项目模式

对于目录模式来说,如果工作空间的项目变多,就会出现麻烦。所以在项目模式里,每个项目独占一个工作空间,类似VS的解决方案。

因为一个项目独占一个工作空间,所以我们没必要把所有文件都挤在一起,还可以再细分。比如我喜欢分为“头文件”、“源文件”、“资源文件”。

“资源文件”目录用于调试程序的相对位置读写,或者存放一些与编译无关的其他文件。每一个类别建立一个目录。

'C/C++'扩展会扫描工作空间下的所有文件,所以在写#include时不需要指定文件夹,代码提示也能正常工作。

但是gcc在编译时只会查找源文件所在目录下的头文件,所以需要额外参数指定头文件目录。

另外,也需要指定需要编译的源文件目录。

而资源文件与编译过程无关,需要修改调试的配置文件。

配置好的tasks.json文件大致如下:

{

"version": "2.0.0",

"tasks": [

{

"type": "shell",

"label": "build(gcc)",

"command": "gcc",

"args": [

"-g",

"-o",

"/tmp/buildtempc",

"-iquote", // 指定头文件目录

"Headers", // 头文件目录

"Sources/*.c" // 源文件目录下的所有源文件

],

"options": {

"cwd": "${workspaceFolder}" // 定位到工作空间

},

"group": {

"kind": "build",

"isDefault": true

}

}

]

}

配置好的launch.json文件大致如下:

{

"version": "0.2.0",

"configurations": [

{

"name": "debug(gdb)",

"type": "cppdbg",

"request": "launch",

"program": "/tmp/buildtempc",

"args": [],

"stopAtEntry": false,

"cwd": "${workspaceFolder}/Resources", // 定位到资源文件目录

"environment": [],

"externalConsole": false,

"MIMode": "gdb",

"setupCommands": [

{

"description": "Enable pretty-printing for gdb",

"text": "-enable-pretty-printing",

"ignoreFailures": true

}

],

"preLaunchTask": "build(gcc)",

}

]

}

这样,就可以跟VS一样在项目中写代码了。

当然,这种配置方法的缺点也显而易见。新建一个项目的成本太大了,每新建一个项目就得再写一次配置文件,并新建三个目录。

不过,在Linux下,这些重复的工作当然是交给计算机来做。我们只需要保存一份'.vscode'模板就好,比如我保存在变量CODE_PATH表示的目录下。每个项目的配置文件都是一样的,直接拷贝就好。

Bash脚本如下:

#!/bin/bash

# Filename: project-c

# Create a C project, and open it in vscode.

echo -n "project name: "

read name

name=$(date +%Y%m%d)-"$name" // 生成项目名

mkdir "$CODE_PATH"/"$name" // 新建项目目录

cd "$CODE_PATH"/"$name"

cp -r "$CODE_PATH"/.vscode . // 拷贝配置文件

mkdir Headers Sources Resources // 新建分类目录

code . // 使用VS Code打开项目

cd - &> /dev/null

在脚本中,我给项目名称加上了时间戳,方便查找与避免重名。启动VS Code的命令是code。

相关内容

特斯拉将开源Model S...
8月3日消息,据外电报道,三年前,特斯拉在其服务网站上发布了201...
2026-08-03 07:43:07
把AI搬进Linux:媒体...
导语:最近有开发者基于Debian推出了Shadowfetch,一...
2026-08-02 19:14:38
慧之安信息取得用于Linu...
国家知识产权局信息显示,慧之安信息技术股份有限公司取得一项名为“一...
2026-07-25 22:36:30
为什么说只有百度网盘能定义...
文 | 佘宗明 “时间证实一切,因为它改变一切。”沈从文在散文《时...
2026-07-23 15:34:23
MPEG-4 Part 2...
IT之家 7 月 23 日消息,科技媒体 Linuxiac 昨日(...
2026-07-23 15:21:40
Buildroot vs ...
在嵌入式与边缘计算开发中,操作系统的选择直接决定了产品的开发效率、...
2026-07-20 15:54:01

热门资讯

开源证券:维持陆家嘴“买入”评... 开源 证券研报指出, 陆家嘴中期业绩大幅增长,租赁现金流入稳中有增。公司2026H1实现归母净利润1...
韩国启动全民AI成长阶梯项目,... 2026年8月3日,韩国科学技术信息通信部正式启动全民AI成长阶梯项目,项目整合全民AI学习馆、全民...
从全民AI入门到创业孵化,韩国... 8月3日,财闻海外资讯消息,韩国科学技术信息通信部正式启动全民AI成长阶梯项目,整合全民AI学习馆、...
AI赋能包 | 产品介绍⑪——... 产品介绍 短视频AI剪辑与碰一碰批量发布系统是一套面向企业短视频矩阵营销的“AI剪辑+碰一碰发布”系...
PandaAI李昱琦:AI交易... 上证报中国证券网讯(记者 胡尧)8月1日,在上海虹口举行的PandaAI第三届因子大赛颁奖典礼暨AI...
真人短剧被AI“抢饭碗”?从业... “去年下半年AI短剧开始兴起,过完年真人短剧行情跌到谷底。真人短剧拍摄量锐减,大量专门承接平台真人剧...
Genspark 发布 Gen... 用 Al-Native 的方式,打造一款新时代的 Office。 8 月 3 日,在 AGI Pla...
原生统一多模态进阶!Sense... 今年4月,商汤科技发布了SenseNova U1,首次完整展示了基于NEO-Unify架构的原生统一...
开放通用智能,MiniMax ... 8月3日,据MiniMax消息,MiniMax正式开源新一代通用视频模型MiniMax H3。据介绍...
商汤科技开源多模态模型Sens... IT之家 8 月 3 日消息,商汤科技今日宣布,面向社区开源轻量级统一多模态模型的预览版本 Sens...