假设我有一个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)
调用吗?
答案 0 :(得分:4)
不,headers
只会完成一次。
您可以编写一个简单的makefile来测试它:
all: foo bar
foo: baz
bar: baz
baz:
echo 'hi'
在执行make
时,hi
只会回显一次。
在第二种情况下,make会发现$(BINARY)
首先取决于headers
,所以它会在其他依赖项之前发生headers
。