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