当前位置: 首页 > news >正文

vscode配置运行完整C代码项目

配置初衷

作为vscode重度使用患者,笔者希望vsocde可以大一统所有代码环境hhh。。。

对于经典的C/C++集成IDE,例如visual studio等,可以一键配置运行环境,但是集成度太高,整个运行的环境像是黑盒,也不利于文件的灵活配置;使用vscode对代码的操作就像搭积木一样,笔者认为这样可以让工程师对于代码和项目的掌控度更高。

运行单个C语言文件

运行单个C文件配置比较简单,需要在vscode的插件商店下载以下扩展插件:

具体的步骤可以参考以下网址进行配置:集成开发环境搭建

单个C文件的配置不属于本篇文章的重点,这里不做详细介绍。

完整C代码项目配置

创建一个简单的C代码项目,文件夹结构如下:

0715_project
|____app
|    |____main.c
|
|____src
|    |____func.c
|
|____inc
|    |____func.h
|
|____bin

其中,0715_project是存放整个C代码项目的文件夹,main是存放主函数的文件夹,src是存放函数源文件的文件夹,inc是存放函数头文件的文件夹,bin是存放C项目生成的.exe文件的文件夹,在代码未运行的时候,这个文件夹为空。

此处需要注意的是,由于.vscode配置文件的默认生成路径是在当前vscode的打开路径下面,vscode的打开路径必须是0715_project,否则当json配置文件中的${fileDirname}会影响系统找到指定要编译的C代码文件。

这里的func文件实现两个简单的功能,分别是字符串打印和uint8类型数据的加法运算,各文件的代码如下:

func.h文件

# ifndef __FUNC__
# define __FUNC__
# include <stdio.h>
# include <stdint.h>void say_hello(void);
uint8_t add(uint8_t a, uint8_t b);#endif

func.c文件

# include <stdio.h>
# include "../inc/func.h"void say_hello(void)
{printf("hello!\n");printf("vscode can run total C peoject!\n");}uint8_t add(uint8_t a, uint8_t b)
{return a+b;
}

main.c文件

# include <stdio.h>
#include "../inc/func.h"int main(void)
{say_hello();uint8_t a = 12;uint8_t b = 23;uint8_t res = add(a,b);printf("%d+%d=%d",a,b,res);return 0;
}

按照文件路径保存之后,对主函数main.c进行编译

第一次运行会报出错误,不用担心,点击debug anyway后打开vsocde生成的配置文件.vscode,首先是launch.json,把以下内容复制过去

{// 使用 IntelliSense 了解相关属性。// 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和调试活动文件","type": "cppdbg","request": "launch","program": "${cwd}//bin//${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "D:\\x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev0\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: gcc.exe build active file"}]
}

其中需要更改的是字段“miDebuggerPath”对应的值,替换为本地的MinGW的路径,一般是在保存路径的bin文件夹中的gdb.exe。

task.json文件更改如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe build active file","command": "D:\\x86_64-14.2.0-release-posix-seh-ucrt-rt_v12-rev0\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g",// "${file}","${cwd}\\src\\*.c","${cwd}\\app\\*.c","-o",// "${fileDirname}\\${fileBasenameNoExtension}.exe""${cwd}//bin//${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

重点需要关注的信息如下:

标号1更改为MinGW的gcc.exe文件路径,一般也是在安装路径的bin文件夹下;

标号2是需要编译的源文件,其中${cwd}表示json文件所在的文件路径,不包含本身的文件名,*.c表示指定文件夹下的所有.c文件;

标号3表示最终生成的exe文件存放的位置;

把一切配置好后 ,在点击编译运行,即可完成编译多个C语言文件的功能。

从结果来看,vsocde可以完成在主函数定义的任务,即打印指定的字符串和进行uint8_t类型的加法运算。


文章转载自:
http://applications.isnyv.cn
http://amass.isnyv.cn
http://bre.isnyv.cn
http://androcles.isnyv.cn
http://axseed.isnyv.cn
http://alternation.isnyv.cn
http://amphineura.isnyv.cn
http://autotoxin.isnyv.cn
http://central.isnyv.cn
http://chetrum.isnyv.cn
http://attrite.isnyv.cn
http://allopolyploidy.isnyv.cn
http://assurgent.isnyv.cn
http://blowfly.isnyv.cn
http://annoy.isnyv.cn
http://abnegate.isnyv.cn
http://amantadine.isnyv.cn
http://basque.isnyv.cn
http://authorization.isnyv.cn
http://altiplano.isnyv.cn
http://bitartrate.isnyv.cn
http://alap.isnyv.cn
http://adminicular.isnyv.cn
http://aneurin.isnyv.cn
http://capitao.isnyv.cn
http://associability.isnyv.cn
http://avionics.isnyv.cn
http://carat.isnyv.cn
http://aquashow.isnyv.cn
http://burleigh.isnyv.cn
http://www.dtcms.com/a/281665.html

相关文章:

  • QGIS新手教程9:字段计算器进阶用法与批量处理技巧
  • onecode 3.0 微内核引擎 基础注解驱动的速查手册(服务治理及通讯)
  • Altium Designer(AD)25软件下载及安装教程(7.9)
  • Axios方法完成图书管理页面完整版
  • Redis Desktop Manager(RDM)下载与安装使用教程
  • JavaScript中关于环境对象的拓展
  • 【Qt】 设计模式
  • Docker 镜像推送至 Coding 制品仓库超时问题排查与解决
  • 业务分析业务架构视角
  • 软件测试面试经历分享?
  • 在 SymPy 中精确提取三角函数系数的深度分析
  • LLM面试题目 3
  • 项目进度与预算脱节,如何进行同步管理
  • Linux部署Redis
  • 46. 携带研究材料(01背包二维数组)
  • Java程序员学从0学AI(五)
  • 发票查验接口的计费规则-核验成功返回参数
  • SpringBoot集成RocketMQ的两种方式
  • WGAS+WGCNA分析文章套路
  • LeetCode Hot100 【1.两数之和、2.两数相加、3.无重复字符的最长子串】
  • 动态数组:ArrayList的实现原理
  • 504网关超时可能是哪些原因导致?
  • web前端渡一大师课 01 事件循环
  • 【交流等效负载电阻的推导】
  • SpringBoot 项目搭建的 4 种常用方式,从入门到实践
  • 魔力宝贝归来虚拟机版怎么修复卡第一个任务
  • Kimi K2驱动Claude Code,稳定且低价
  • 入选《机器视觉》:视觉AI 生态链加速工业检测场景落地
  • MySQL数据库----函数
  • vue3:wangEditor使用过程中,点击编辑回显数据的问题修复.