Makefile中的依赖关系

时间:2010-12-01 19:33:16

标签: makefile gnu-make

假设我有一个Makefile:

all: $(BINARY)

$(BINARY): $(OBJS) $(DEBUG_OBJS)
    #Link objects here

$(OBJS): headers
    #Compile code into objects without debug option

$(DEBUG_OBJS): headers
    #Compile code into objects with debug option

headers:
    #Create on-the-fly header files

如您所见,headers$(OBJS)都需要定位$(DEBUG_OBJS)。问题是,headers会被叫两次吗?此外,以下代码是否等于/等同于上述代码:

all: $(BINARY)

$(BINARY): headers $(OBJS) $(DEBUG_OBJS)
    #Link objects here

$(OBJS): 
    #Compile code into objects without debug option

$(DEBUG_OBJS): 
    #Compile code into objects with debug option

headers:
    #Create on-the-fly header files

在那里,标题会在$(OBJS)$(DEBUG_OBJS)之前被$(BINARY)调用吗?

1 个答案:

答案 0 :(得分:4)

不,headers只会完成一次。

您可以编写一个简单的makefile来测试它:

all: foo bar

foo: baz

bar: baz

baz:
        echo 'hi'

在执行make时,hi只会回显一次。

在第二种情况下,make会发现$(BINARY)首先取决于headers,所以它会在其他依赖项之前发生headers