我想知道是否可以编写一个包含多个规则的Makefile,每个规则都定义了自己的先决条件,并在不重复配方的情况下执行所有相同的配方.例:
TARGETS= file1 file2 file3
all: $(TARGETS)
file1: dep1 dep2
file2: dep2 dep3 dep4
file3: dep2 dep1
    cat $^ > $@
谢谢!
Eld*_*mov 43
是的,它是以一种相当明显的方式编写的:
TARGETS= file1 file2 file3
all: $(TARGETS)
file1: dep1 dep2
file2: dep2 dep3 dep4
file3: dep2 dep1
$(TARGETS):
    cat $^ > $@
只是为了澄清.
通用make规则如下所示:
targets... : prerequisites...
    recipe
    ...
规则的任何部分都可以省略.如果没有配方,可以在makefile中的任何位置填充先决条件列表,目标可以出现在多个规则语句的左侧.
例如,以下示例等同于上面的示例(假设Makefile设计正确,以便先决条件的顺序无关紧要):
file1 file3       : dep1
file1 file2 file3 : dep2
file2             : dep3 dep4
与列出先决条件不同,每个目标最多只能有一个明确的配方.在配方中,您可以使用自动变量来获取目标名称,先决条件列表等.
正如@Calmarius在评论中提到的,这不适用于模式规则,例如%.txt: %.foo.目标中的多个模式意味着规则一次生成所有这些目标.
此模式规则有两个目标:
Run Code Online (Sandbox Code Playgroud)%.tab.c %.tab.h: %.y bison -d $<这告诉make,配方
bison -d x.y将同时x.tab.c和x.tab.h.如果文件foo依赖于文件parse.tab.o并且scan.o文件scan.o取决于文件parse.tab.h,parse.y则更改时,配方bison -d parse.y将仅执行一次,parse.tab.o并且scan.o将满足两者的先决条件 .
可以在模式规则中定义多个先决条件(即,只要其目标包含%词干,否则它将是常规规则).
| 归档时间: | 
 | 
| 查看次数: | 13642 次 | 
| 最近记录: |