Ubuntu下分别用gcc和makefile编译C语言

2023-10-26

在Windows环境下通过虚拟机软件(我用的是VMware)安装Ubuntu 18.04 Desktop,并通过Vim编写C语言,再用gcc和makefile分别编译,并作出区别解析。

1. 编写C文件

程序说明:编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。

开始ubuntu操作
首先调到code文件工作目录下,并用vim创建一个sub1.h头文件(vim编辑器不会用的,可以到菜鸟教程中学习)。

在这里插入图片描述
编写sub1.h头文件的程序,进行函数申明。

在这里插入图片描述
编写sub1.c文件,实现函数x2x()。

在这里插入图片描述
在这里插入图片描述
编写main1.c文件,调用函数x2x()。

在这里插入图片描述
在这里插入图片描述
生成main1.c、sub1.h、sub1.c文件。

在这里插入图片描述
到这里,准备工作就做好了,就可以开始编译这些文件了。

2. gcc编译C文件

首先将sub1.c文件用gcc编译成目标文件sub1.o;
再将main1.c文件用gcc编译成目标文件main1.c;
再将两个目标文件编译成一个可执行文件;
最后执行文件,打印结果。

在这里插入图片描述
在这里插入图片描述
从这我们可以看出,如果将两个.c文件编译成可执行文件,需要进行三步,倘若其中一个文件更改了,又要删除原目标文件和可执行文件并重新编译C文件,如果文件过多的话,可想而知,两个字——麻烦!!!

3.makefile编译C文件

3.1 创建makefile文件

首先删除之前编译后的.o文件和可执行文件all;
再用vim创建makefile文件。
在这里插入图片描述
在这里插入图片描述
makefile文件的格式
第1行:all可以看做是目标文件(注意:不要将与目标文件.o混淆),是通过依赖文件main1.o和sub1.o得到的;
第2行:设定了第1行的编译规则(用gcc编译main1.o和sub1.o得到可执行文件all);
第3行:main1.o可以看做是目标文件,是通过依赖文件main1.c得到的;
第4行:设定了第3行的编译规则(用gcc编译main1.c得到main1.o文件,完整的格式是:gcc -c main1.c -o main1.o。这里缺省了);
第5行:sub1.o可以看做是目标文件,是通过依赖文件sub1.c得到的;
第6行:设定了第5行的编译规则。

整个makefile文件的逻辑顺序是自下而上,从.c文件到可执行文件。

3.2 编译makefile文件

直接敲命令:make
即可编译所有的.c文件并生成可执行文件all,再输出结果。

在这里插入图片描述
这时,如果我们修改其中一个.c文件,比如main1.从文件,将传递的参数2和3修改为3和3再来用make命令编译一下。

在这里插入图片描述
这时,只编译了修改后的main1.c文件,没有编译sub1.c文件,并生成了新的可执行文件all。

4. 总结

单独用gcc编译所有的C文件要麻烦得多,而用makefile编译所有的C文件明显要方便得多,只需要make一个命令,就可以编译所有的C文件,即使修改了部分C文件,也只会编译修改了的C文件,减少了编译的时间,多推荐大家使用makefile,语法也不难。
如果有帮到您的地方,不胜荣幸,本文章属于原创,如果转载或引用请附带链接,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下分别用gcc和makefile编译C语言 的相关文章

随机推荐

  • 一个比window.open() 打开更快的方法

  • 华为OD机试 - 数列描述(Java)

    题目描述 有一个数列a N N 60 从a 0 开始 每一项都是一个数字 数列中a n 1 都是a n 的描述 其中a 0 1 规则如下 a 0 1 a 1 11 含义 其前一项a 0 1是1个1 即 11 表示a 0 从左到右 连续出现了
  • vulnstack域环境靶场(四)

    环境搭建 进入Ubuntu的web虚拟机 ubuntu为我们的web环境 其中的web环境需要手动开启 全部为docker环境 需要启动的环境分别为 s2 045 CVE 2017 12615 cve 2018 12613 启动方法如下 s
  • 32位算术逻辑运算单元alu设计_算术移位和逻辑移位详解

    大部分的C编译器 用移位的方法得到代码比调用乘除法子程序生成的代码效率高 最近在看Java源码的时候 看到了一些位运算的操作 特意在整理了一下移位运算 不整理不知道 一整理吓一跳 那就随着一起看下去吧 移位运算是将数值向左向右移动 对于十进
  • Centos 6.5下C连接MySQL测试

    Centos 6 5下C连接MySQL测试 include
  • Spark sql的简单使用

    目录 加载依赖 spark sql简单入门 Spark sql简单应用 应用配置 读取文件 读取文本文件并展示数据 show 将数据完全显示 读取json文件 读取jdbc文件 读取压缩格式的文件 将数据以压缩格式存储 parquet或者o
  • hdlc协议解码的四种方法

    hdlc协议规定了 在hdlc中不能出现连续的6个1 因为这是hdlc帧的分割标志 因此在编码的时候每遇到5个连续的1就插入0 因此解码时就需要碰到5个连续的1就要去掉后面的0 而在我们的计算机中都是以整数字节描述信息 因此造成了用pc解h
  • 【uni-app教程】三、 UniAPP 生命周期

    三 UniAPP 生命周期 学习一个工具的目的核心是什么 是为了解决核心业务逻辑问题 业务逻辑很多时候简单的解释一句话 在合适的时机干合适的事情 OK 什么是合适的时机呢 简单的说 页面话行过程中 各个阶段的回调孟数就是页面中的时机 我们也
  • 如何在C语言中巧妙地避免使用if语句?

    近期在做CSAPP的homework时碰到一些题目 代码中不允许使用if语句 于是聪明的同学们想出了一个巧妙的办法 利用C语言中与运算符 的 短路 特性完成了这个任务 例如 如果C语言原语句是 if x gt y a x 为了去掉这个if
  • yolov4 darknet安装笔记

    yolov4 darknet安装笔记 cuda cudnn安装 cuda 10 0下载及安装 运行安装包 运行补丁包 建立软链接 添加环境变量 对应版本cudnn下载及安装 darknet GPU版本安装 Makefile修改 nvcc 路
  • LA@二次型标准形@标准化问题介绍和合同对角化@二次型可标准化定理

    文章目录 二次型的标准形 标准形的矩阵式 标准化问题 合同对角化 二次型标准化分析 二次型可标准化定理 正交相似角度证明 配方角度证明 case1 方法1 case2 方法2 case2 case3 二次型的标准形 如果二次型只含有变量的平
  • Kerberos安全认证-连载12-Kafka Kerberos安全配置及访问

    目录 1 Kafka配置Kerberos 2 客户端操作Kafka 3 Java API操作Kafka 4 StructuredStreaming操作Kafka 5 Flink 操作Kafka 技术连载系列 前面内容请参考前面连载11内容
  • Dictionary的基本用法

    1 创建泛型哈希表 然后加入元素 Dictionary
  • 宋分题——Java实现登录窗口 和 信息录入窗口

    编写一个登录窗口 密码输入采用密码框 输入密码显示为 当输入用户名admin密码123的时候点击确定跳转到学生信息录入窗口界面 其他输入显示用户名密码错误 点击取消退出运行 import java awt import java awt e
  • RANSAC基本原理

    计算机视觉基本原理 RANSAC 1 RANSAC简介 2 基本思想 3 范例 4 迭代次数推导 Reference 1 计算机视觉基本原理 RANSAC 1 RANSAC简介 RANSAC RAndom SAmple Consensus
  • Ubuntu 怎么开放端口

    要在 Ubuntu 中开放端口 需要使用 ufw 防火墙 首先 确保 ufw 已经安装 如果尚未安装 可以使用以下命令进行安装 sudo apt get install ufw 然后 使用以下命令开启 ufw 防火墙 sudo ufwena
  • 玩转代码

    前言 在面试的时候 经常会遇到一道经典的面试题 如何优化网页加载速度 常规的回答中总会有一条 把 css 文件放在页面顶部 把 js 文件放在页面底部 那么 为什么要把 js 文件放在页面的最底部呢 我们先来看下这段代码
  • Android 字体加载

    1 Font配置文件 位于frameworks base data fonts system fonts xml fallback fonts xml 文件结构
  • 【LVM技术创建磁盘和磁盘配额】

    文章目录 一 知识点 二 实验 1 创建物理卷 2 卷组打包命名形成逻辑硬盘 3 创建逻辑卷 4 格式化 创建文件系统 5 挂载 三 扩容逻辑卷 四 给卷组继续添加空间 五 磁盘配额 一 知识点 LVM技术特点 1 打破分区只能单个挂载 单
  • Ubuntu下分别用gcc和makefile编译C语言

    Ubuntu下分别用gcc和makefile编译C语言 1 编写C文件 2 gcc编译C文件 3 makefile编译C文件 3 1 创建makefile文件 3 2 编译makefile文件 4 总结 在Windows环境下通过虚拟机软件