linux之makefile编写、Linux模块化编程1(最简单的方法)

首先要理解一下makefile是什么东西,有什么作用!官方的话就不说了,简单粗暴理解。makefile就是集成编译,比如说你写了好多个**.c**文件。平常就是一个一个gcc,就算你编译好了还要一个个运行不是太费事了嘛!所以makefile的存在就是“集成编译”一下子编译成一个文件。这样编辑运行起来不就简单太多了莫。废话不多说直接上代码,顺带说一下模块化编程:
我先建立一个makefile文件vim makefile任何创建方式都行只要创建的是文本文件就行。centos或者Ubuntu下的gedit makefile,deepin下的dedit makefile都是可以的。
在这里插入图片描述
接下来我们具体以例子说明。首先写一个最简单的C语言程序

#include <stdio.h>
void main()
{
	printf("hello makefile\n");
}

在这里插入图片描述
经过gcc后生成了text可执行文件,下面我们给删除使用makefile来写。在这里插入图片描述
我们来解释一下:text就是你要编译成的可执行文件,text然后**:**后面再跟一个空格 然后输入你的依赖文件。你是要编译hello.c文件,所以你的依赖文件就是hello.c。完整第一句就是text: hello.c
然后换行,注意到换行后前面差不多有4个空格,那不是空格是按一下tap按键形成的,这里必须要按下tap按键。我用的是deepin系统,再vim中按下换行自动就形成了,如果在别的系统按下换行后还是首个格子一定要按下tap键然后就是写我们要执行的指令,gcc hello.c -o text意思就是编译hello.c文件并且生成文件名为text的可执行文件。然后保存退出。接着我们再终端下输入make运行makefile文件。
在这里插入图片描述
可以清楚看到再执行make后系统就运行了gcc hello.c -o text命令,./text后可以运行。
接下来我们看一下模块化编程如何使用makefile:
涉及到三个文件tool.c,tool.h,和main.c
我们先来看tool.c
在这里插入图片描述
main文件
在这里插入图片描述
可以看出find_max是一个比较大小的函数,传入数组和数,通过数组中的元素和传入的数比较大小,输出数组中最大的那个数。即直接再mian函数里面直接调用find_max函数,在tool.c文件里面写find_max函数。那么注意到find_max函数并没有声名,所以我们在tool.h文件里面声名
在这里插入图片描述
.c文件都是函数部分,.h文件是函数的声名和一些参数的定义。
我们看一下tool.h文件
在这里插入图片描述

#ifndef _TOOL_H
#define _TOOL_H

#include <stdio.h>
int find_max(int arr[],int n);

#endif

.h文件里:

#ifndef _TOOL_H
#define _TOOL_H
·
·
·
#endif

格式都是这样,注意图中化框的部分一般情况下_TOOL_H这是个参数,一般为_文件名_H这个格式,(其实写什么都行)模块化编程就是这个要求。
在tool.h文件里面我们对find_max函数进行了声名,以及头文件
#include <stdio.h>的调用,这样我们在使用头文件时候只需要调用#include "tool.h"即可,注意这里面包含了find_max函数的声名,在调用这个函数的文件必须调用#include "tool.h"
接下来我们看一下makefile的编写:

main: main.c tool.o
	gcc main.c tool.o -o main

tool.o: tool.c
	gcc -c tool.c
clean:
	rm *.o main

main.c里面就是主函数,tool.c是写函数的文件,tool.h是写的函数的声名文件。
看第一行main: main.c tool.o,解释一下tool.o文件是tool.c文件编译成的中间文件。假设这个程序有多个函数,那么就会用多个.o文件,tool2.o tool3.c tool4.o、、、、、直接跟在后面即可。gcc就是对这些整体进行编译。

tool.o: tool.c
	gcc -c tool.c

这一部分就是将tool.h编译成中间文件tool.o的过程,注意-c是参数。意思是编译成.o文件.

clean 这一部分是删除部分,意思是删除编译生成的可执行文件mian和所有.o文件。
我们看一下运行结果:
在这里插入图片描述
这就是这一部分的makefile最简单的基础,后续还会继续更makefile.欢迎指正交流。谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值