Makefile 百分比符号在生成文件中的作用是什么?

Makefile 百分比符号在生成文件中的作用是什么?,makefile,Makefile,我有一个makefile,如下所示: include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) %-test: Something here 我理解它在目标规则行中的用途。第一行的%符号在做什么?它是否与目标规则行中的百分比符号有关 当我编写makesometarget时,是否执行了makefile中未作为任何规则的一部分写入的行(如此makefile中的第一行)?如果是,那么执行顺序是什么?正如您在中所读到的,百分

我有一个makefile,如下所示:

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))

%-test: 
       Something here
我理解它在目标规则行中的用途。第一行的
%
符号在做什么?它是否与目标规则行中的百分比符号有关

当我编写
makesometarget
时,是否执行了makefile中未作为任何规则的一部分写入的行(如此makefile中的第一行)?如果是,那么执行顺序是什么?

正如您在中所读到的,百分比用作通配符。
patsubst
的第一个参数构成模式。最后一个参数中的每个项目/单词都将与此模式进行比较,如果匹配,则将替换为第二个参数。如果模式中有通配符(%),则它将匹配任意数量的字符,并且这些字符将复制到替换字符串中第二个参数中%的位置

在您的示例中,模式只是通配符,因此它将最后一个参数中的任何单词与函数匹配,并且该单词将被复制到替换字符串(第二个参数)中%的位置

举个例子可以让事情更清楚。让我们假设
TEST_SUBDIRS
包含两个名称

TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
这相当于以下内容

include $(src)/test1/Make.tests $(src)/test2/Make.tests
生成文件按顺序逐行处理。变量赋值是“内部化”的,include语句会将其他文件的内容直接插入到该位置,然后将该内容作为makefile的一部分进行处理。
当规则被读入时,依赖关系图由规则形成,并且在处理整个文件之后,执行必要的配方来更新请求的目标