2010-04-29 59 views
4

希望这是有关生成模式规则的一个基本问题的多个实例: 我想使用通配符不止一次在一个前提的规则,即在我的Makefile我有的makefile模式规则:单通配符,前提

data/%P1.m: $(PROJHOME)/data/%/ISCAN/%P1.RAW 
     @echo " Writing temporary matlab file for $*" 
     # do something 

data/%P2.m: $(PROJHOME)/data/%/ISCAN/AGP2.RAW 
      @echo " Writing temporary matlab file for $*" 
      # do something 

在这个例子中,当通配符%是AG时,我尝试调用make。存在$(PROJHOME)/data/AG/ISCAN/AGP1.RAW和$(PROJHOME)/data/AG/ISCAN/AGP2.RAW两个文件。我尝试以下make命令并得到如下的输出:

[[email protected] gender-diffs]$ make data/AGP1.m 
make: *** No rule to make target `data/AGP1.m'. Stop. 

[[email protected] gender-diffs]$ make data/AGP2.m 
Writing temporary matlab file for AG, part 2... 

[[email protected] gender-diffs]$ ls data/AG/ISCAN/AG* 
data/AG/ISCAN/AGP1.RAW data/AG/ISCAN/AGP2.RAW 

我如何能实现在第一生成规则相同通配符的多个实例?

回答

4

这似乎工作:

.SECONDEXPANSION:  
data/%P1.m: $(PROJHOME)/data/$$*/ISCAN/$$*P1.RAW 
      @echo "Writing temporary matlab file for $*, part 1..."