Makefile 相同的规则,不同的先决条件
在我的项目中,有两种类型的文件,它们都是使用相同的命令创建的,但具有先决条件:Makefile 相同的规则,不同的先决条件,makefile,gnu-make,Makefile,Gnu Make,在我的项目中,有两种类型的文件,它们都是使用相同的命令创建的,但具有先决条件: %.blvp: lab_bd.act %.ext %.slvp: lab_syn.act %.ext %.blvp %.slvp: $(eval x := $(basename $@)) act2lvp $< $x lvp -sDEv $x.ext $x.prs && touch $@ 我怎样才能从上面得到要进行的先决条件?或者,您是否可以针对这种情况建议一种替代方法
%.blvp: lab_bd.act %.ext
%.slvp: lab_syn.act %.ext
%.blvp %.slvp:
$(eval x := $(basename $@))
act2lvp $< $x
lvp -sDEv $x.ext $x.prs && touch $@
我怎样才能从上面得到要进行的先决条件?或者,您是否可以针对这种情况建议一种替代方法?模式规则不会以这种方式组合,但您可以通过以下方法获得相同的效果: 另外,您可以通过以下方式省去一些麻烦: 编辑:我忽略了重建*.act文件的任务。我们可以添加$ACT作为前提条件,如果我们使用:
我要明确一点:你的前两条线不是行动计划。模式规则必须有一个配方,否则将被解释为删除该模式规则。还要注意:在配方中使用eval或shell通常是一种反模式。无论你想做什么,这几乎都不是最好的方法。我怀疑basename不是最好的方法。$*这正是我想要解决的问题。非常感谢。但是,使用此设置,*.act文件实际上是否不再依赖?如果其中一个文件发生更改,是否将进行重新编译?如何使用通配符定义这些变量?是否有方法执行%.xyz:FILE=%.abc?
$ make xyz.slvp
act2lvp xyz
Usage: /usr/local/cad/bin/act2lvp <actfile> <processname>
makefile:17: recipe for target 'xyz.slvp' failed
make: *** [xyz.slvp] Error 1
%.blvp: ACT=lab_bd.act
%.slvp: ACT=lab_syn.act
%.blvp %.slvp : %.ext
$(eval x := $(basename $@))
act2lvp $(ACT) $x
lvp -sDEv $x.ext $x.prs && touch $@
%.blvp %.slvp : %.ext
act2lvp $(ACT) $*
lvp -sDEv $*.ext $*.prs && touch $@
.SECONDEXPANSION:
%.blvp %.slvp : %.ext $$(ACT)
act2lvp $(ACT) $*
lvp -sDEv $*.ext $*.prs && touch $@