linux——makefile编写

文章目录

  • 一、为啥要编写makefile
  • 二、makefile的一些规则
    • 2.1 基本格式
    • 2.2 编写方式
    • 2.3一些规则
  • 三、makefile编写
  • 四、makefile其余用法

一、为啥要编写makefile

目的很简单,减少我们的工作量啊。
在linux环境下,我们可以编译一个程序,可以用 gcc xxxxx.c 就行,但是编译多个文件呢。当然也可以,比如 gcc xx1.c xxx2.c … xxx99.c 这样就很麻烦,而且容易漏掉 ,所以为了避免这种问题,我们就需要使用makefile。你可以把makefile理解为自动编译文件。

二、makefile的一些规则

2.1 基本格式

target:components  
TAB	conmand
.......
target:components  
TAB	conmand
.....
....
target:components  
TAB	conmand

第一行表示的是目标文件和依赖关系。第二行是命令。TAB就是一个TAB键。
你可能很迷糊,我现在也很迷糊,但是我们先记下来好伐。下面一一记录。
target:目标文件,可执行文件(如 clean)。
components:依赖文件,可以多个文件(.o 文件)。
command:命令(如 gcc)。

2.2 编写方式

我们来举个例子
假设我们现在有几个源文件,要求用一个makefile文件来编写。
源文件有:
mian.c
add.c add.h(add.c对应的头文件)
sub.c sub.h(sub.c对应的头文件)
通过倒叙方式来编写

//我们的目标是生成一个main文件,如何来生成一个main文件,就是依赖于main.o add.o sub.o这三个文件
main:main.o add.o sub.o
	gcc main.o add.o sub.o -o main
//但是源文件没有这三个 .o 文件,所以我们需要生成这三个.o文件。是不是 .o文件就成了目标文件呢,所以按照规则来写就是了
main.o:main.c  add.h sub.h
	gcc -c main.c -o main.o
//这里.o 文件要一个一个写,这里有三个所以写三次
add.o:add.c add.h
	gcc -c add.c -o add.o
sub.o:sub.c sub.h
	gcc -c sub.c -o sub.o
//main的依赖文件就已经写完了,最后添加一个clean方更新后再次编译
clean:
	rm -f main main.o add.o sub.o 

2.3一些规则

按照上面的例子做一个解释

目标文件需要依赖文件
目标文件(没有后缀);-o命令生成目标文件

依赖文件需要源文件
依赖文件(-o文件);-c命令生成-o文件

源文件(.c文件);

三、makefile编写

为了展示,所以我们这里简简单单的写一个例子
我们写一个简单的计算文件
首先写一个main函数
main.c

int main()
{
	printf("1 + 1 =%d\n",add(1,1));
	printf("9 - 3 =%d\n",sub(9,3));
	return 0;
}

在编写一个 add.c函数

#include "test.h"
int add(int i, int j)
{
	return i + j;
}

再编写一个 sub.c函数

#include "test.h"
int sub(int a, int b)
{
	return a - b;
}

最后编写一个 test,h的头文件

    #include 
    #ifndef _TEST_H  
    #define _TEST_H  
      
    int add(int i, int j);  
    int sub(int a, int b);  
    #endif  

编写一个 makefile文件(不用后缀)

main:main.o add.o sub.o
	gcc main.o add.o sub.o -o main
main.o:main.c add.c sub.c 
	gcc -c main.c -o main.o
add.o:add.c test.h
	gcc -c add.c -o add.o
sub.o:sub.c test.h
	gcc -c sub.c -o sub.o
clean:
	rm -f main main.o add.o sub.o 

linux——makefile编写_第1张图片

四、makefile其余用法

如果你没有更改过文件,再次make,他会提示你 你编译的执行文件已经是最新的
linux——makefile编写_第2张图片如果你更改过源文件,他就会重新make一次
linux——makefile编写_第3张图片这是通过系统自带的时间来判断你更改文件的时间是make之前还是make之后。
同理我们也可以通过这样来判断你的源文件是否被改过。

make clean:

上面的代码可以看出,make clean就是删除所有的依赖文件。这样我们就可以重新编译代码,既方便又快捷。
你也可以把 make clean 看成一个标准格式里面的东西,因为基本上的makefile文件都也有他。

你可能感兴趣的:(linux)