接上文,假如有如下一个Makefile其中一部分是这样的:
1 | obj: utils.o display.o edit.o interface.o save.o |
而且obj的依赖还会不停的变动,增加或者减少,更可能的是这一组依赖还会出现在文件中的其他地方,命令规则的参数也可能有很长一串,那想想,每次都要写这么多的文件名/命令字符串,的确是个很麻烦的事,而且还容易出错,更不容易查错。make已经为我们想到了替代方式,就是用一个变量来替代这一组长长的文件名列表/参数选项列表,在make规则中只使用这个变量来代替那一组文件列表,这样既能减少错误,还能减少工作量。
通常使用变量的使用是OBJ = XXOO OOXX或者FLAG = ZZZZ等形式,在引用的时候使用$(美元符)加以引用,如$(OBJ),这样儿在引用的时候,就像C语言的宏替换类似,变量所代表的名称列表就会被展开到,对应的位置,如上面的例子就可以写成:
1 | OBJ = utils.o display.o edit.o interface.o save.o |
这样就可以避免多处引用的时候出现写错的情况。
关于简单的自动推导,就是make工具有一个默认规则,给出目标和依赖,如果没有生成的命令,那么就会默认按照cc –c XXX.c –o XXX.o的形式,自动生成对应的目标文件。那么,在Makefile初步-1中所写的文件,就可以变成这样:
1 | OBJ = utils.o display.o |
虽然能省不少打字的工夫,但是还是写明生成规则比较好,因为有助于后期的维护。这就是Makefile中简单的变量和自动推导规则。