概念
定义规则,指定文件编译和链接的顺序,并告诉make, 又称 自动化编译.
包含5个内容
1.显式规则,
2.隐晦规则,
3.变量定义
4.文件指示
5.注释
如果make之前已经有编译过的o文件.可以使用make clean
还是用之前的3个文件
tool.h tool.c main.c
在tool.h中
int find_max(int arr[],int n);
在tool.c中
#include "tool.h"
int find_max(int arr[],int n){
int max= arr[0];
int i;
for(i= 0;i<n;i++){
if(arr[i]>max){
max= arr[i];
}
}
return max;
}
在main.c中
#include <stdio.h>
#include "tool.h"
int main(){
int arr[]= {1,3,5,8,2};
int max= find_max(arr,5);
printf("max=%d\n",max);
}
先不用makefile 编译一波
命令如下:
gcc -c tool.c
gcc -c main.c
gcc -o main main.o tool.o
./main
然后编辑makefile文件:
前面的define func 表示 怎么再makefile文件中声明和使用有参和无参的构造方法
define func
$(info "hello")
endef
$(call func )
define func1
$(info $(1) $(2))
endef
$(call func1,hello,world)
定义objects 变量是为了以后如果改 .o文件时 只要再变量定义的时候改下就OK了
实际上的make的命令也就是
objects = main.o tool.o
main: $(objects)
gcc $(objects) -o main
当执行 make clean时 执行如下:
objects = main.o tool.o
.PHONY:clean
clean:
-rm main $(objects)
.PHONY:显示的指明clean是一个为目标,避免和文件重名 编译时候发生错误
因为这种target不会生成 clean文件,为目标的名字不能和文件名重复 所以需要.PHONY
整个makefile文件如下
define func
$(info "hello")
endef
$(call func )
define func1
$(info $(1) $(2))
endef
$(call func1,hello,world)
objects = main.o tool.o
main: $(objects)
gcc $(objects) -o main
.PHONY:clean
clean:
-rm main $(objects)