2012-03-29 85 views
1

有一个耗时的步骤,可以使一堆文件变平。makefile,用于多输入的规则

基本上,我想这是有效的语法

%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

doit: project.out 
    # project.out merged 

我根本不是一个makefile的专家,但我喜欢用.SULFFIXS这样做,当只有两个文件,将是巨大的适应这两个输入,或为将来使用两个输出...

.SULFFIX: .in.out 
.in.out: 
    dosomething $< [email protected] 
doit: project.out 

GNU使3.81

我已经找到了如何与多个输出的规则进行了几次讨论,但没有与服务器al输入。

回答

2
%.out: %.input1 %.input2 
    merge $<1 $<2 [email protected] 

有在makefile规则没有$1$2自动变量,但是,没有$^这是所有先决条件的列表。由于规则只有两个先决条件,因此它扩展为%.input1 %.input2,或者更准确地说,是$*.input1 $*.input2。因此:

%.out: %.input1 %.input2 
    merge $^ [email protected] 

应该足够了。

.SULFFIXES IMO并不是非常有用,因为它使用了隐式规则定义,而这些隐式规则定义是无法看到和更改的。

[更新]

至于doit目标,以防止其在执行每一个你可能想改变规则的时间命令:

doit: project.out 
    # project.out merged 
    touch [email protected] 
+0

好点,忘了$ ^。 ..如果我需要的命令是第一个呢?我运气不好? – gcb 2012-03-29 22:55:39

+0

好吧,刚刚测试过,用你的例子$ <是第一个文件。所有的事情进展都比预期的要好。谢谢 – gcb 2012-03-29 22:57:41

+0

嗡嗡声,但有了这种模式,我每次运行它执行的doit规则。 – gcb 2012-03-29 22:58:49