百分号在makefile中的作用是什么?

时间:2011-09-13 15:26:27

标签: makefile

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

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

%-test: 
       Something here

我理解它在目标规则行中的用途。第一行中的%符号是什么?在目标规则行中有百分号签名吗?

当我写make sometarget时,makefile中的行是不是作为任何规则的一部分写的(就像这个makefile中的第一行一样)执行了吗?如果是,那么执行的顺序是什么?

1 个答案:

答案 0 :(得分:39)

正如您在the GNU make manual中所读到的那样,百分比充当了通配符。 patsubst function的第一个参数构成了模式。将最后一个参数中的每个项目/单词与此模式进行比较,如果匹配,则将其替换为第二个参数。如果模式中存在通配符(%),则它将匹配任意数量的字符,并且这些字符将复制到第二个参数中%的位置处的替换字符串中。

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

一个例子可能会使事情变得更加清晰。我们假设TEST_SUBDIRS包含两个名称。

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

这相当于以下内容。

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

按顺序逐行处理makefile。变量赋值是“内部化的”,include语句导致其他文件的内容按字面插入该位置,之后该内容作为makefile的一部分进行处理。
依赖图是在读入规则时根据规则形成的,在处理完整个文件后,执行必要的配方以更新请求的目标。