2017-02-28 423 views
0

谷歌搜索并不能帮助您理解%变量是如何在下面的Makefile代码片段中使用的。Makefile中'%'的语义是什么?

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

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INC) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

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

回答

1

这是一个“implicit rule”。 %使字$(OBJDIR)/%.o a 模式。它告诉如果它试图建立一个目标并且目标的名称匹配该模式(其中%可以替代一个或多个字符 - 任何字符),并且确定与模式$(SRCDIR)/%.c匹配的文件(其中%这里的值与目标值相同)或者已经存在或者可以建立,那么make可以使用这个配方来构建这个目标。

所以,如果化妆要建立一个文件foo/bar.o和可变OBJDIR的值为foo,那么这个模式foo/%.o将匹配与%匹配bar该文件(这就是所谓的在GNU使文档) 。

这时如果SRCDIR有值blah,并可以找到(或创建)一个名为blah/bar.c文件,那么这个隐含规则可以用来运行这个食谱($(CC) -c -o [email protected] $< $(CFLAGS))建立目标foo/bar.o

+0

完美,与这个例子完美结合。 –