makefile+make
1.make
-gcc-编译器
-make-Linux自带的构建器
--构建的规则在makefile中
2.makefile文件的命名
-makefile
-Makefile
3.makefile中的规则
gcc a.c b.c c. -p app
-三部分:目标,依赖,命令
目标:依赖
(tab缩进)命令
app:a.c b.c c.c
gcc a.c b.c c.c -o app
-makefile中由一条或者多条规则组成
-*-make
make命令会调用makefile中的命令
4.makefile的编写
-第一个版本
缺点:效率低,需改一个文件,所有文件会被全部重新编译
-第二个版本
-工作原理
-检测依赖是否存在:
向下搜索下边的规则,如果有规则是用来生成查找的依赖的,执行规则中的命令
-依赖存在,判断是否需要更新
-原则:目标时间>依赖的时间
-缺点:冗余
-第三个版本:
-自定义变量:
obj=a.o b.o c.o
obj=10
-变量的取值
aa=$(obj)
-makefile自带的变量:大写
-CPPFLAGS
-CC
-自动变量:
$@:表示规则中的目标
$<:规则中的第一个依赖
$^:规则中所有的依赖
只能在规则中的命令中使用
obj=main.o add.o sub.o mul.o
target=app
$(target):$(obj)
gcc $(obj) -o $(target)
%.o:%.c
gcc -c $< -o $@
模式匹配
%.o:%.c
第四个版本
makefile所有的函数都有返回值
-查找指定目录下指定类型的文件
src=$(wildcard ./*.c)
返回值为当前目录下所有.c 源文件列表。
-匹配替换
obj=$(patsubst %.c,%.o,$(src))
清除工作目录过程文件:
规则除了完成源代码编译之外,也可以完成其它任务。例如:前边提到的为了实现
清除当前目录中编译过程中产生的临时文件(edit 和哪些.o 文件)的规则:
clean :
rm edit $(objects)