一个百分号在makefile中做什么?

我有一个makefile,看起来像这样:

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) %-test: Something here 

我了解目标规则行中的目标。 第一行中的符号是什么? 目标规则行中是否有百分比符号?

当我编写make sometarget ,makefile中的行是否不作为任何规则的一部分(如该makefile中的第一行)被执行? 如果是,那么执行的顺序是什么?

正如你可以在GNU make手册中阅读的 ,百分比作为通配符。 patsubst 函数的第一个参数形成了模式。 最后一个参数中的每个项目/单词都与此模式进行比较,如果匹配,则将其replace为第二个参数。 如果模式中有一个通配符(%),它将匹配任意数量的字符,并将这些字符复制到位于第二个参数%处的replacestring中。

在你的例子中,模式只是通配符,所以它会匹配函数的最后一个参数中的任何单词,这个单词将被复制到replacestring(第二个参数)的地方%。

一个例子可能会使事情更加清楚。 假设TEST_SUBDIRS包含两个名字。

 TEST_SUBDIRS := test1 test2 include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) 

这相当于以下内容。

 include $(src)/test1/Make.tests $(src)/test2/Make.tests 

一个makefile是按顺序逐行处理的。 variables赋值是“内部化的”,并且包含语句会导致其他文件的内容逐字地插入该位置,之后该内容将作为生成文件的一部分进行处理。
从规则中读取依赖关系图,在处理整个文件之后,执行必要的配方以更新请求的目标。