'%'的语义是什么?在Makefile中?

时间:2017-02-28 19:14:17

标签: makefile gnu-make

谷歌搜索对于理解%变量在下面的Makefile片段中的使用方式没有多大帮助。

_OBJ = a.o b.o c.o
OBJ = $(patsubst %,$(OBJDIR)/%,$(_OBJ))

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INC)
    $(CC) -c -o $@ $< $(CFLAGS)

有人可以帮帮我吗?这是否意味着如果.c下有五个$(SRCDIR)个文件,则会在场景后面填充许多*.o个规则?

1 个答案:

答案 0 :(得分:1)

这是&#34; implicit rule&#34;。 %将单词$(OBJDIR)/%.o设为模式。它告诉make如果它正在尝试构建目标并且目标的名称与该模式匹配(%可以替换一个或多个字符 - 任何字符),并且该文件是匹配模式$(SRCDIR)/%.c(其中%此处具有与目标中相同的值)已经存在或可以构建,然后make可以使用此配方来构建该目标。

因此,如果make想要构建文件foo/bar.o而变量OBJDIR的值为foo,那么此模式foo/%.o将匹配该文件% 1}}匹配bar(这在GNU make文档中称为 stem )。

然后,如果SRCDIR具有值blah并且make可以找到(或创建)名为blah/bar.c的文件,那么此隐式规则可用于构建目标{{1}通过运行此配方(foo/bar.o)。