了解模式规则

时间:2014-11-17 18:47:57

标签: makefile

我试图围绕模式规则以及它们如何运作。我正在使用this文章作为参考说明

  

模式规则是为多个文件指定规则的简明方法   一旦。该规则将取决于文件名,但通常取决于   以简单的方式对他们。您可以使用%指定模式   通配符。当存在于依赖关系列表中时,%匹配任何字符串   任何长度;当存在于目标列表中时,%代表   依赖项列表中的%匹配的字符串。

     

以下模式规则将采用任何.c文件并将其编译为   .o文件:

     

%.o: %.c $(CC) $(CFLAGS) $(INCLUDES) -c $(input) -o $(output)

     

(这假设您有变量CC,CFLAGS和INCLUDES   定义为合适的东西。 Makepp将猜测CC和的值   CFLAGS)

     

规则的第一行说它适用于所有可能的   与模式%.c匹配的输入文件。这些.c文件可以   使用指定的转换为相应的.o文件   动作。

     

规则的行为与我们看到的其他行动非常相似   以前,除了它使用自动变量。一个自动的   variable是一个变量,其值由makepp自动设置   取决于它出现的规则。一些有用的自动   变量是:

$(input)
    The name of the first input file. In this rule, this would be the file that matches the %.c pattern. $(dependency) is a synonymn for $(input). In older makefiles, you will also see the cryptic symbol $< used as well. 
$(output)
    The name of the first output file. In this rule, this would be the file that matches the %.o pattern. $(target) and $@ are synonymns. 
$(inputs)
    The name of all explicitly listed input files. In this case, since there is only one, $(inputs) is equivalent to $(input). $(dependencies) and $^ are synonymns. 
$(outputs)
    The name of all explicitly listed targets. In this case, since there is only one, $(outputs) is equivalent to $(output). $(targets) is a synonymn for $(outputs). 

以下是我的问题:

1)假设我有2个文件FileA.c和FileB.c。当我应用上面提到的模式规则时,它将如何适用于上述两个文件。给出的示例仅处理一个文件。

2)自动变量inputinputs

之间的区别是什么

1 个答案:

答案 0 :(得分:0)

模式规则将应用于每个目标文件,该文件与需要构建的规则相匹配。

因此,如果您需要同时构建FileA.oFileB.o(因为它们都被列为某些其他目标的先决条件(例如FileBin: FileA.o FileB.o),该规则将运行两次,一次用于每个

采取规则

FileBin: FileA.o FileB.o
        @echo '$$input = $(input)'
        @echo '$$inputs = $(inputs)'

运行时输出

$input = FileA.o
$inputs = FileA.o FileB.o

还应该指出,inputoutput是makepp变量名,对GNU make本身无效。