这个makefile可以运行当前目录下以.c结尾的文件变为可执行文件。
下面是对makefile的一下介绍:
1规则,2函数,3变量
1个规则:
目标:依赖条件
(必须是一个tab键,不能多也不能少)命令
例如:
hello:hello.c
gcc -c hello.c -o hello
此时目标就是hello,所要依赖的条件是hello.c(也就是说没有hello.c是不可能生成hello的);
由依赖条件生成目标的命令就是:gcc -c hello.c -o hello
注意事项:
1:目标时间必须晚于依赖条件时间,否则更新目录;
2:依赖条件如果不存在,找寻新的规则去产生依赖;
2:两个函数
src = $(wildcard %.c):找到当前目录下所有后缀为.c的文件赋值给src;
obj = $(patsubst %.c ,%.o, $(src)):把src里所有后缀为.c的文件替换为.o;
(obj = $(patsubst %.c ,%, $(src)):把src里所有后缀为.c的文件替换为可以执行文件,例如add.c----->add然后在linux命令行中输入./add就可以运行)
这个时候就可以把上面的完整makefile改变一下:
3个自动变量:
[email protected]:在规则命令中表示规则中的目标;
$<:在规则命令中表示第一个依赖条件;
$^:在规则命令中表示所有依赖条件;
也许你上面看不到,那我们来看一个例子:
有上述的图片可以知道,好多重复的地方,例如gcc -c $< -o [email protected],并且此时的makefile不宜扩展,
为了方便扩展和简写,提出了规则模式
规则模式%o:%c
gcc -c $< -o [email protected]
下面开一个例子来理解: