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

vscode makfile编译c程序

编译工具安装

为了在 Windows 上安装 GCC,您需要安装 MinGW-w64。

MinGW-w64 是一个开源项目,它为 Windows 系统提供了一个完整的 GCC 工具链,支持编译生成 32 位和 64 位的 Windows 应用程序。

1. 下载MinGW-w64源代码,如图点击进去可以下载源代码,但是由于网页更新后,该路径没有编译好的安装包。

访问 MinGW-w64 的主页 mingw-w64.org,进入 MinGW 下载页面 Downloads - MinGW-w64,下载最新版本的 MinGW-w64 安装程序。

2.下载mingw-builds-install.exe安装,改方法可能没法下载

 https://sourceforge.net/projects/mingwbuilds/files/mingw-builds-install/

3.下载绿色版本的MinGW-w64,解压并把路径加入环境变量即可使用,下载链接如下:

https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/

所以演示绿色版的安装过程,绿色版只是需要添加环境变量,将绿色版解压到D盘根目录,如下下载后解压即可直接使用;

把存放的路径比如当前存放置:D:\mingw64\bin 加入环境变量

win+R,输入 cmd,进入windows命令行模式。输入 gcc -v 或者gcc --version,可以查看gcc安装情况

vscode安装

isual Studio Code虽然它是一个通用的文本编辑器,但它有很多插件支持 C/C++ 开发,使其成为一个流行的选择,通过安装 C/C++ 插件和调整设置,你可以使其成为一个很好的 C 语言开发环境。

1. 安装包下载地址

VScode 官网地址:https://code.visualstudio.com/

VScode 官方文档地址:https://code.visualstudio.com/docs

下载想要的格式包链接:

Download Visual Studio Code - Mac, Linux, Windows

2. 安装教程

VSCode 安装很简单,点击 Next,傻瓜式安装;

注意安装路径设置、环境变量默认自动添加到系统中,勾选以下所有选项:

vscode插件安装

比如安装汉化包,VScode 安装汉化包很简单,打开 VScode,点击安装扩展,在搜索框输入 Chinese,然后点 Install 就可以。

 

vscode编译C程序

1.配置C/C++环境,安装C/C++插件。点击插件,搜索“C”,点击“install”:

 下载以后,重启VSCode,如果提示你需要安装一些其他C/C++扩展,选择是就可以 

2.新建一个main.c文件,并输入c代码

3. vscode界面,File->Open Folder,选择打开上面的D:\c_code文件夹,

3.运行代码

【1】点击如图控件

【2】选择第一个,就会在终端就输出编译 结果,同时生成了一个task.json的文件

或者,点击"Terminal"->Run Build Task,在配置的目录生成可执行文件,在终端命令行模式运行可执行文件。

或者,界面右键,点击“Run Code”,即可运行该C代码(单个文件可以这样运行程序)

配置文件和编译调试选项

想要在 VS Code 中运行和调试 C/C++ 程序,涉及三个配置文件:tasks.json、launch.json 和 c_cpp_properties.json。这三个配置文件一起提供了一个完整的 C/C++ 开发环境的配置。

  •    tasks.json 文件用于配置任务(例如编译)
  •    launch.json 文件用于配置调试器
  •  c_cpp_properties.json 文件用于配置 IntelliSense 功能

tasks.json 文件

tasks.json可以修改为如下,对应注释部分

{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe build active file","command": "D:\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g",//"${file}","*.c",//这一句代表编译当前目录下所有后缀都是.c的文件"-o",//"${fileDirname}\\${fileBasenameNoExtension}.exe""${fileDirname}\\allfile.exe"//上面那句话的意思是,生成的可执行文件全部叫做allfile.exe,如果想改回来,把这一句注释掉,然后把上一句取消注释就行了],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

tasks. json文件生成步骤如下:

1.选择.c文件,选择终端配置。

 2. 选择如图部分

或者点击小齿轮,选择如下部分,即可生成tasks.json.

3. 生成了如下配置文件

 4.把配置文件修改为自己的样式,用于生成可执行文件

5.运行代码,生成可执行文件

6. 生成任务成功后,打开PowerShell,运行生成的文件(如果运行不成功,可能是由于gcc环境变量是新配置的,重启一下vscode即可生成成功)!

7. 如果需要在终端输入所以需要使能code runner的Run In Terminal功能。

launch.json文件

1.点击如图图标,点击创建launch.json文件

点击右下角:

 2. 修改launch.json的配置,如修改如下注释部分,注意是修改编译生成的可执行文件路径和名称;以及gdb.exe调试器的路径。

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch",//"program": "输入程序名称,例如 ${workspaceFolder}/a.exe","program": "${fileDirname}\\allfile.exe",//上面一句是tasks.json中设置好的可执行程序,如果没有按照我上一步来设置tasks.json,不要动这里"args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb",//"miDebuggerPath": "/path/to/gdb","miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",//上一句是指你的gdb路径,把之前让你加入环境变量的路径复制过来,然后加上gdb.exe,然后把单斜杠\换成双斜杠\\!!!!!"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]},{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": true,"cwd": "d:/c_code","program": "d:/c_code/build/Debug/outDebug","MIMode": "gdb","miDebuggerPath": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

 3.点击 “Run” ->“Start Debugging”,或者点击左侧 “Run and Debug” 按钮打开运行和调试窗口,点击窗口上方 Launch 旁边的绿色小三角按钮开始调试(也可以直接按 F5 键进入调试模式)。开始调试代码。

按调试按键,单步执行,即可查看调试信息,变量值变化等

c_cpp_properties.json 文件

c_cpp_properties.json 文件不是必须的,主要用于配置 C/C++ 扩展的 IntelliSense 设置,指定编译器路径、标准库路径、头文件路径、宏定义等信息。它影响的是编辑器对代码的智能提示、语法检查等功能,而不是编译任务。

创建 c_cpp_properties.json 文件的方法是:通过快捷键 Ctrl + Shift + P 打开执行命令的输入框,输入 “C/C++”,选择 “C/C++: 编辑配置(JSON)”。

如果上面没有出现编辑配置(UI),则可以选择其他版本重新安装。

选择编辑配置后多了.vscode

 

进行相关项配置:

生成如下配置:

多文件编译

如有如下的c程序文件:

add.c:

#include <stdio.h>int add_function(int a,int b){int sum = a+b;printf("add_function,a + b,a = %d,b =%d\n",a,b);return sum;
}

add.h:

#ifndef __ADD__H
#define __ADD__Hint add_function(int a,int b);#endif

div.c:

#include <stdio.h>int div_function(int a,int b){int div = a/b;printf("div_function,a / b,a = %d,b =%d\n",a,b);return div;
}

div.h:

#ifndef __ADD__H
#define __ADD_Hint div_function(int a,int b);#endif

main.c:

#include <stdio.h>
#include "add.h"
#include "div.h"int main()
{printf("Hello, World! \n");int sum = add_function(1,2);printf("sum 1 + 2 = %d\n",sum);int div = div_function(10,2);printf("div 10/2  = %d\n",div);return 0;
}

多文件放置同一目录

主程序包含相应头文件,调用其他函数即可即可。点击右上角的三角形,点击"Run C/C++ file”,即可运行程序。

对应的tasks.json的配置如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe build active file","command": "D:\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g",//"${file}","${workspaceFolder}\\*.c",//这一句代表编译当前目录下所有后缀都是.c的文件"-o",//"${fileDirname}\\${fileBasenameNoExtension}.exe""${workspaceFolder}\\${workspaceRootFolderName}.exe"//上面那句话的意思是,生成的可执行文件全部叫做allfile.exe,如果想改回来,把这一句注释掉,然后把上一句取消注释就行了],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

另外的运行方法:点击"Terminal"->Run Build Task,在配置的目录生成可执行文件,在终端命令行模式运行可执行文件。

 多文件在不同目录

1. 修改tasks.json文件:

.vscode文件夹中会出现tasks.json文件,打开该文件,在args中添加如下内容:

"-g", "${workspaceFolder}\\*.c",
"-g", "${workspaceFolder}\\div\\*.c",
"-I", "${workspaceFolder}",
"-I", "${workspaceFolder}\\div",

注释掉如下内容:

 //"${file}",

上述内容的解读如下:

  • "-g"用于添加源文件路径,类似于在IDE中添加Source Folder;

  • "-I"用于添加源文件的头文件,类似于IDE中设置Include Path。

2. 执行程序编译运行,点击右上角的三角形,点击"Run C/C++ file”,即可运行程序。

另外的运行方法:点击"Terminal"->Run Build Task,在配置的目录生成可执行文件,在终端命令行模式运行可执行文件。

使用makefile编译

相关文章:

vscode makfile编译c程序

编译工具安装 为了在 Windows 上安装 GCC&#xff0c;您需要安装 MinGW-w64。 MinGW-w64 是一个开源项目&#xff0c;它为 Windows 系统提供了一个完整的 GCC 工具链&#xff0c;支持编译生成 32 位和 64 位的 Windows 应用程序。 1. 下载MinGW-w64源代码&#xff0c;如图点…...

【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏

【IEEE出版】第六届国际科技创新学术交流大会暨通信、信息系统与软件工程学术会议&#xff08;CISSE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 嵌入式系统简介 嵌入式硬件设计的组成部分 设…...

JavaScript 概述

### JavaScript 概述 JavaScript 是一种广泛使用的编程语言&#xff0c;它最初由 Netscape 公司的 Brendan Eich 在1995年创建&#xff0c;目的是为网页添加交互性。随着时间的发展&#xff0c;JavaScript 已经从一个简单的脚本语言演变成了一种功能强大的编程语言&#xff0c;…...

2024年10月个人工作生活总结

本文为 2024年10月工作生活总结。 研发编码 一个证书过期问题记录 某天&#xff0c;现场反馈某服务无法使用问题&#xff0c;经同事排查&#xff0c;是因为服务证书过期导致的。原来&#xff0c;证书的有效期设置为5年&#xff0c;这个月刚好到期。 虽然这个问题与自己无直接…...

uniapp ,微信小程序,滚动(下滑,上拉)到底部加载下一页内容

前言 小程序的内容基本都是滑动到底部加载下一页&#xff0c;这个一般都没有什么好用的组件来用&#xff0c;我看vant和uniapp的插件里最多只有个分页&#xff0c;没有滚动到底部加载下一页。再次做个记录。 效果预览 下滑到底部若是有下一页&#xff0c;则会自动加载下一页&…...

MySQL中的日志类型有哪些?binlog、redolog和undolog的作用和区别是什么?

简介&#xff1a; MySQL中有六种日志文件&#xff0c;分别是&#xff1a;重做日志&#xff08;redo log&#xff09;、回滚日志&#xff08;undo log&#xff09;、二进制日志&#xff08;binlog&#xff09;、错误日志&#xff08;errorlog&#xff09;、慢查询日志&#xff0…...

【uni-app】创建自定义模板

1. 步骤 打开自定义模板文件夹 在此文件夹下创建模板文件&#xff08;注意后缀名&#xff09; 重新点击“新建页面” 即可看到新建的模板 2. 注意事项 创建的模板必须文件类型对应&#xff08;vue模板就创建*.vue文件, uvue模板就创建*.uvue文件&#xff09;...

Cesium移动Primitive位置

与传统的Entity实体不同&#xff0c;Primitive作为一种自定义基本图元&#xff0c;几何形状、材质和其他属性均由使用者定义&#xff0c;在需要绘制大量静态几何图形的高效渲染场景中更为适用。 Primitive的移动涉及到矩阵变换&#xff0c;并不像Entity那样给它替换一个新的坐…...

安卓13默认连接wifi热点 android13默认连接wifi

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有时候我们需要让固件里面内置好,相关的wifi的ssid和密码,让固件起来就可以连接wifi,不用在手动操作。 2.问题分析 这个功能,使用普通的安卓代码就可以实现了。 3.代…...

parted 磁盘分区

目录 磁盘格式磁盘分区文件系统挂载使用扩展 - parted、fdisk、gdisk 区别 磁盘格式 parted /dev/vdcmklabel gpt # 设置磁盘格式为GPT p # 打印磁盘信息此时磁盘格式设置完成&#xff01; 磁盘分区 开始分区&#xff1a; mkpart data_mysql # 分区名&…...

第三百零八节 Log4j教程 - Log4j日志到数据库

Log4j教程 - Log4j日志到数据库 我们可以使用log4j API通过使用org.apache.log4j.jdbc.JDBCAppender对象将信息记录到数据库中。 下表列出了JDBCAppender的配置属性。 属性描述bufferSize设置缓冲区大小。默认大小为1。driverJDBC驱动程序类。默认为sun.jdbc.odbc.JdbcOdbcDr…...

ai智能语音电销机器人可以做哪些事情?

AI智能语音电销机器人是结合人工智能技术进行自动化电话销售和客户互动的工具&#xff0c;能够完成一系列任务&#xff0c;有助于提升销售效果、优化客户体验和提高工作效率。以下是AI智能语音电销机器人可以做的一些主要事情&#xff1a; 1. 自动拨号 AI语音电销机器人可以自…...

CleanShot X - Mac(苹果电脑)专业截图录屏软件

CleanShot X 不仅提供了基础的截图功能&#xff0c;更内置了强大的图片编辑器&#xff0c;让你能轻松添加标注、形状、文本……以及将多个截图进行合并。 无论是为社交媒体制作图文&#xff0c;还是制作专业的产品 / 教程演示&#xff0c;CleanShot X 都能满足你的需求。 软件…...

Kafka 客户端工具使用分享【offsetexplorer】

前言&#xff1a; 前面我们使用 Spring Boot 继承 Kafka 完成了消息发送&#xff0c;有朋友会问 Kafka 有没有好用的客户端工具&#xff0c;RabbitMQ、RocketMQ 都有自己的管理端&#xff0c;那 Kafka 如何去查看发送出去的消息呢&#xff1f; 本篇我们就来分享一个好用的工具…...

uni-app 下拉刷新、 上拉触底(列表信息)、 上滑加载(短视频) 一键搞定

一、下拉刷新 1. 首先找到pages.json中 给需要进行下拉刷新的页面设置可以下拉刷新 2. 然后在需要实现下拉刷新的script标签内添加 导入onPullDownRefresh import {onPullDownRefresh} from dcloudio/uni-app 下拉刷新触发的事件 onPullDownRefresh(()> {console.log(正…...

基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)

&#x1f388;系统亮点&#xff1a;协同过滤算法、节流算法、支付宝沙盒支付、图形化分析、实时聊天&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk1…...

如何在Linux环境中的Qt项目中使用ActiveMQ-CPP

文章目录 代码1&#xff1a;消费者代码2&#xff1a;生成者 之前在Linux下的qt程序中使用activeMQ的时候也是用了很多时间去研究&#xff0c;本来想的是好好记录一下&#xff0c;但是当时顾着写代码。很多细节也不想再去走一遍了。大概写一下怎么使用就行了。注意&#xff1a;一…...

HTML字符实体详解

HTML 字符实体是在 HTML 文档中用来表示特定字符的特殊编码。这些字符可能因为直接输入而引发解析错误,或某些字符在 HTML 中具有特殊含义(例如,< 和 > 用于标签)。因此,使用字符实体可以确保文本的准确呈现。 1. 什么是字符实体? 字符实体由一个 & 符号开始,…...

Netty学习——NIO基础与IO模型

导学 Socket和NIO的区别 Socket和NIO是Java中用于网络编程的两个不同的API&#xff0c;具有不同的设计理念和用途。以下是它们的主要区别&#xff1a; 1. 定义 Socket: Socket是Java中用于实现网络通信的传统API&#xff0c;通常被称为Java I/O&#xff08;输入/输出&#…...

ZYNQ7045之YOLO部署——FPGA-ZYNQ Soc实战笔记1

一、简介 1、目标检测概念 2、目标检测应用 3、目标检测发展历程 二、YOLO V1 1、输入 必须为448x448分辨率 2、网络结构 卷积 池化 卷积 池化 3、输出 最终7x7x30表示&#xff0c;7x7个各自&#xff0c;每个格子有30个数据&#xff0c;30个数据包含两个部分 1&#xff1a;…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...