2.1 指定变量
在上篇介绍的例子中,终极目标“edit”所在的规则如下:
edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o
可以发现,“edit”所依赖的文件“.o”,在依赖列表和命令中各自被写了一次,显然,如果我们需要为“edit”增加一个新的依赖(这在开发中基本上都会出现),那么我们就需要将新的“.o”文件分别插入两个位置。本着写的越多,错的可能性越大的理念,我们提出了一种解决多次书写依赖的方法:变量。我们可以定义一个变量,可以是“objs”、“objects”等各种字符串,我们将依赖列表赋值给这个变量,哪里需要使用依赖列表的时候,仅仅需要使用变量就可以了。
于是,上例的规则就可以修改为:
objs=main.o kbd.o command.o display.o insert.o search.o files.o utils.o
edit:$(objs)
cc -o edit $(objs)
在所有需要依赖列表的地方使用$(objs)代替。以上代码完全等价与原始的代码。而且,当我们需要增加或者删除依赖的时候,仅仅需要修改objs变量就可以了。以此为启发,我们在clean处的代码也可以写为:
clean:
rm edit $(objs)
2.2 自动推导命令规则
我们观察修改过后的Makefile文件:
`1 objs = main.o kbd.o co