Linux-makefile笔记
makefile
1.Makefile实际上是一个脚本文件,脚本把一些命令的集合批量放在一个文件里,统一执行。脚本可以干任何事情,Makefile用处单一。
2.Makefile里面内容
gcc hello -o hello
hello:hello.c
gcc hello.c -o hello(必须有一个tab缩进)
3.Makefile重要内容
命名:
1.makefile
2.Makefile
备注:如果是其他名字,则不能使用make命令
一个规则:
目标:依赖条件
(一个tab缩进)命令
1.目标的时间必须晚于依赖条件的时间,否则,更新目录
2.依赖条件如果不存在,找寻新的规则去产生依赖
默认第一个是终极目标,可以写入“ALL:文件名”,规定生成的最终文件
基本规则:1.若想生成目标,检查规则中的依赖条件是否存在,如不存在,则需要寻找是否有规则用来是生成该依赖文件
2.检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任意一个被更新,则目标必须更新
两个函数:
wildcard函数
src=$(wildcard*.c) :匹配当前工作目录下所有.c文件,将文件名赋值给列表,赋值给变量src
patsubst把src变量里所有后缀为.c的文件替换成.o
obj=$(patsubst %.c,%.o,$(src))将参数3中,包含参数1的部分,替换成参数2
3个自动变量:
$@ 表示规则中的目标,在规则的命令中(在依赖条件中不行),表示规则中目标
$< 表示规则中的第一条件(再规则的命令中)
$^ 表示规则中的所有条件,组成一个列表(再规则的命令中)如果将该变量应用在模式规则中,它可将依赖条件列表中依赖一次取出,套用模式规则
4.Makefile下另一种写法
hello:hello.o
gcc hello.o -o hello
hello.o:hello.c
gcc -c hello.c -o hello.o
5.终端输入命令“make”
得到编译后的文件
6.多个文件生成可执行文件用makefile
a.out:hello.c add.c sub.c div1.c -o a.out
gcc hello.c add.c sub.c div.c -o a.out
7.
a.out:hello.o add.o sub.o div1.c -o a.out gcc hello.o add.o sub.o div.o -o a.out hello.o:hello.c gcc -c hello.c -o hello.o add.o:add.c gcc -c add.c -o add.o sub.o:sub.c gcc -c sub.c -o sub.o div.o:div.c gcc -c div.c -o div.o
8.makefile可以写入
clean: (clean没有依赖条件)
-rm -rf 文件名
‘-’作用是删除不存在文件时,不报错
终端输入
make clean -n
模拟执行
make clean
执行
9.“#”是makefile里面的注释符号
10.模式规则
比如都是.o文件依赖于.c文件
可以写成:
%.o:%.c
gcc -c $< -o $@