2015-11-19 54 views
4

我正在嘗試僅訂購一個先決條件,以確保在輸出文件之前存在構建目錄。根據GNU Make manual多個隱含規則,用於僅限訂單的前提條件

您可能仍然聲明的先決條件的多行的同一目標:它們被適當地追加(正常前提條件附加到正常的先決條件的列表;順序僅前提條件附加到列表中僅限訂單的先決條件)。

因此,我希望這應該工作:

BUILDDIR:=build 

all: $(BUILDDIR)/test.o 
clean: 
    rm -rf $(BUILDDIR) 

$(BUILDDIR): 
    mkdir -p $(@) 

$(BUILDDIR)/%.o: | $(BUILDDIR) 
$(BUILDDIR)/%.o: %.c 
    gcc -o [email protected] -c $< 

但它沒有,沒有創建目錄。然而,當我把規則在一行,它的工作:

$(BUILDDIR)/%.o: %.c | $(BUILDDIR) 

在這個簡單的例子,也沒關係,但我需要這樣多的先決條件列出了我的更復雜的makefile,手冊使它聽起來像應該起作用。我怎樣才能做到這一點?

如果它的事項:

$ make -v 
GNU Make 3.81 

回答

2

的隱含規則沒有食譜中implicit rule search掉落時,其唯一的目的就是cancel以前定義相同的規則。這意味着行$(BUILDDIR)/%.o: | $(BUILDDIR)基本上沒有效果。

既然你已經有前提條件的列表,你可以使用常規的和靜態模式規則來代替:

BUILDDIR := build 
OBJS  := $(BUILDDIR)/test.o 

all: $(OBJS) 
clean: 
    $(RM) -r $(BUILDDIR) 

$(BUILDDIR): 
    mkdir -p [email protected] 

$(OBJS): | $(BUILDDIR) 
$(OBJS): $(BUILDDIR)/%.o: %.c 
    $(CC) -o [email protected] -c $<