谷歌搜索对于理解%
变量在下面的Makefile片段中的使用方式没有多大帮助。
_OBJ = a.o b.o c.o
OBJ = $(patsubst %,$(OBJDIR)/%,$(_OBJ))
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INC)
$(CC) -c -o $@ $< $(CFLAGS)
有人可以帮帮我吗?这是否意味着如果.c
下有五个$(SRCDIR)
个文件,则会在场景后面填充许多*.o
个规则?
答案 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
)。