Ubuntu:学习gcc和Makefile编译C程序

一、gcc编译C程序

1.编译C文件

sub1.h

#ifndef __SUB1_H
#define __SUB1_H

#include<stdio.h>

float x2x(int a,int b);         //计算b除以a的结果

#endif

sub1.c

#include "sub1.h"

//一个简单的除法

float x2x(int a,int b)
{
	float ans;
	ans=(float)b/a;
	return ans;
}

main1.c

#include"sub1.h"

int main()
{
	int x=2,y=9;            //定义x和y变量
	printf("%.2f\n",x2x(x,y));      //输出处理后的值,保留两位小数
	return 0;
}

在Ubuntu系统下编译好这三个文件即可。
可参考以下链接:
链接: 在Linux(Ubuntu版)下编写运行C语言程序.
链接: Linux(ubuntu)常用命令及修改文件总结.

2.gcc编译过程

步骤一
命令:gcc -c sub1.c
作用:将sub1.c程序转换为目标文件sub1.o
步骤二
命令:gcc main1.c sub1.o -o main1
作用:编译main1.c文件为目标文件main1.o,然后链接sub1.o目标文件生成main1可执行文件
步骤三
执行./main1命令,即可执行编译生成的main1程序
在这里插入图片描述
我在编写源文件的时候不小心打错了一个字母所以导致出错,使用命令再次返回文件内进行了修改

二、gcc编译与windows编译的比较

在这里插入图片描述
可以看到Windows系统下的编译就要简单很多,也不需要我们自己手动生成可编译文件了。相比之下,gcc编译其实更加接近我们计算机的编译原理,而Windows下的编译则更为方便,可以直接使用工具达到目的。

三、makefile编译C程序

使用makefile编译C程序,首先要建立一个makefile文件,在文件内写入需要执行的代码,再进行运行。下面附上一个学习makefile的链接。
链接: Makefile的使用.
引用一段话,我认为这也是学习makefile的重要意义

什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的集成开发环境 (integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的和专 业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士, 你还是要了解HTML的标签的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会 写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。

简而言之makefile,就是定义编译规则,通过make命令来编译项目的工具。
编译makefile文件

main1:sub1.o main1.c
        gcc main1.c sub1.o -o main1

sub1.o:sub1.c
        gcc -c sub1.c -o sub1.o

clean:
        rm *.o 

执行make命令即可得到可执行文件main1,执行make clear即可清除执行过程产生的.o文件。
在这里插入图片描述
我这里出现make not found,but can be installed with是因为我没有下载make工具,执行sudo apt install make即可。

四、总结

通过gcc与windows的对比学习,我们可以加深对于计算机编译原理的理解,有助于更加了解计算机本身的运行模式。makefile的实际操作同样让我们对于编译过程的了解有极大的提高,可以让我们更加专业于“计算机”这个行业。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值