定义命令包
如果Makefile中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以 define
开始,以 endef
结束,如:
- define run-yacc
- yacc $(firstword $^)
- mv y.tab.c $@
- endef
这里,“run-yacc”是这个命令包的名字,其不要和Makefile中的变量重名。在 define
和endef
中的两行就是命令序列。这个命令包中的第一个命令是运行Yacc程序,因为Yacc程序总是生成“y.tab.c”的文件,所以第二行的命令就是把这个文件改改名字。还是把这个命令包放到一个示例中来看看吧。
- foo.c : foo.y
- $(run-yacc)
我们可以看见,要使用这个命令包,我们就好像使用变量一样。在这个命令包的使用中,命令包“run-yacc”中的 $^
就是 foo.y
, $@
就是 foo.c
(有关这种以 $
开头的特殊变量,我们会在后面介绍),make在执行命令包时,命令包中的每个命令会被依次独立执行。