首先make可以简单甘分为make_zhi()同埋ni_make(a)两种带参数同埋不带参数嘅函数。
博君一笑啫,切入正题。。。。
make对Makefile进行处理,将距变成shell可执行嘅脚本,最后由shell解释器来执行有make翻译过嘅脚本。并且系翻译一句然后shell执行一句
^-^ make中有潜规则:只要make看到一个.o文件,它就会自动甘把对应的.c文件加到依赖文件中,而且gcc -c .c都会被推导出来
就好似
/*makefile*/
CC = gcc
OBJ = main.o mytool1.o mytool2.o
make: $(OBJ)
$(CC) -o main $(OBJ)
main.o: mytool1.h mytool2.h //隐藏嘅命令式gcc -c main.c
mytool1.o: mytool1.h //同样系潜规则
mytool2.o: mytool2.h //一样
.PHONY: clean
clean:
rm -f main $(OBJ)
makefile中有一D内置宏,分别系$@、$^、$<。代表的意义分别系:
$@--目标文件,
$^--所有嘅依赖文件,
$<--第一个依赖文件。
可改写为
/*makefile*/
CC = gcc
OBJ = main.o mytool1.o mytool2.o
main: $(OBJ)
$(CC) -o $@ $^
main.o: main.c mytool1.h mytool2.h
$(CC) -c $<
mytool1.o: mytool1.c mytool1.h
$(CC) -c $<
mytool2.o: mytool2.c mytool2.h
$(CC) -c $<
.PHONY: clean //假目标避免和同名文件冲突,否则无依赖clean文件永远系最新,不必执行后面嘅命令
clean:
rm -f main $(OBJ)// 伪指令,不生成目标
总之make就系N多个gcc -c自动化执行脚本,另外听讲linux下有个automake可以避免出错