我试图围绕模式规则以及它们如何运作。我正在使用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)自动变量input
和inputs
答案 0 :(得分:0)
模式规则将应用于每个目标文件,该文件与需要构建的规则相匹配。
因此,如果您需要同时构建FileA.o
和FileB.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
还应该指出,input
和output
是makepp变量名,对GNU make本身无效。