2017-02-28 55 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

完美,與這個例子完美結合。 –