我有一个如下所示的 makefile:
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
%-test:
Something here
我了解它在目标规则行中的用途。第一行中的 %
符号是做什么的?它与目标规则行中的百分号有什么关系吗?
当我编写 make sometarget
时,makefile 中未作为任何规则一部分编写的行(例如此 makefile 中的第一行)是否会执行?如果是,那么执行顺序是什么?
最佳答案
正如您可以在 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 的一部分进行处理。
读入规则时会形成依赖关系图,处理整个文件后,会执行必要的配方来更新请求的目标。
关于makefile - makefile 中的百分号有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404444/