我有一个看起来像这样的makefile:
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
%-test:
Something here
Run Code Online (Sandbox Code Playgroud)
我理解它在目标规则行中的用途.%
第一行的标志是什么?在目标规则行中有百分号签名吗?
当我写的时候make sometarget
,makefile中的行是不是作为任何规则的一部分写的(就像这个makefile中的第一行一样)执行了吗?如果是,那么执行的顺序是什么?
eri*_*ous 40
正如您可以在GNU make手册中看到的那样,百分比充当通配符.patsubst
函数的第一个参数构成了模式.将最后一个参数中的每个项目/单词与此模式进行比较,如果匹配,则将其替换为第二个参数.如果模式中存在通配符(%),则它将匹配任意数量的字符,并且这些字符将复制到第二个参数中%的位置处的替换字符串中.
在您的示例中,模式只是通配符,因此它将匹配函数的最后一个参数中的任何单词,并且此单词将被复制到%位置的替换字符串(第二个参数)中.
一个例子可以使事情更清楚.我们假设TEST_SUBDIRS
包含两个名称.
TEST_SUBDIRS := test1 test2
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
Run Code Online (Sandbox Code Playgroud)
这相当于以下内容.
include $(src)/test1/Make.tests $(src)/test2/Make.tests
Run Code Online (Sandbox Code Playgroud)
makefile是逐行处理的.变量赋值是"内部化的",include语句导致其他文件的内容按字面插入该位置,之后该内容作为makefile的一部分进行处理.
在读取规则时从规则形成依赖图,并且在处理整个文件之后,执行必要的配方以更新所请求的目标.
归档时间: |
|
查看次数: |
40644 次 |
最近记录: |