天天看点

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

首先要理解一下makefile是什么东西,有什么作用!官方的话就不说了,简单粗暴理解。makefile就是集成编译,比如说你写了好多个**.c**文件。平常就是一个一个gcc,就算你编译好了还要一个个运行不是太费事了嘛!所以makefile的存在就是“集成编译”一下子编译成一个文件。这样编辑运行起来不就简单太多了莫。废话不多说直接上代码,顺带说一下模块化编程:

我先建立一个makefile文件

vim makefile

任何创建方式都行只要创建的是文本文件就行。centos或者Ubuntu下的

gedit makefile

,deepin下的

dedit makefile

都是可以的。

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

接下来我们具体以例子说明。首先写一个最简单的C语言程序

#include <stdio.h>
void main()
{
	printf("hello makefile\n");
}
           
linux之makefile编写、Linux模块化编程1(最简单的方法)

经过gcc后生成了text可执行文件,下面我们给删除使用makefile来写。

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

我们来解释一下: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文件。

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

可以清楚看到再执行make后系统就运行了gcc hello.c -o text命令,./text后可以运行。

接下来我们看一下模块化编程如何使用makefile:

涉及到三个文件tool.c,tool.h,和main.c

我们先来看tool.c

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

main文件

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

可以看出find_max是一个比较大小的函数,传入数组和数,通过数组中的元素和传入的数比较大小,输出数组中最大的那个数。即直接再mian函数里面直接调用find_max函数,在tool.c文件里面写find_max函数。那么注意到find_max函数并没有声名,所以我们在tool.h文件里面声名

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

.c

文件都是函数部分,

.h

文件是函数的声名和一些参数的定义。

我们看一下tool.h文件

linux之makefile编写、Linux模块化编程1(最简单的方法)
#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

文件。

我们看一下运行结果:

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

这就是这一部分的makefile最简单的基础,后续还会继续更makefile.欢迎指正交流。谢谢

继续阅读