2012-10-04 23 views
0

我一直在使用Makefile,並保持一些東西sepparate我決定包括一個新的通用makefile。我面臨的問題是,我的第一個生成文件看起來是這樣的:爲什麼Makefile包含應該是畢竟的:target?

名Makefile.test

include ./Makefile.a 
all: a b c 
b: 
    @echo "b" 
c: 
    @echo "c" 

名Makefile.a

a: 
    @echo "a" 

當我執行我的生成文件:讓-f Makefile文件。測試我只打印出「a」並完成。

,使其工作的唯一方法就是地方包括波紋管(任何地方)的所有:目標

有一個原因,這個行爲鏈接纔可呢?

謝謝!

回答

10

當你這樣說:

include ./Makefile.a 

化妝只是拉Makefile.a到當前的Makefile以同樣的方式是#include <x.h>確實在C:它插入的Makefile.a內容替換include語句並不斷去。其結果是,使看到這個它開始搞清楚該怎麼做的時候:

a: 
    @echo "a" 
all: a b c 
b: 
    @echo "b" 
c: 
    @echo "c" 

因此,在源順序的第一個目標將是a因爲你沒有指定目標,使將使用第一個。這就是你的結果來自哪裏。

你可以明確指定all目標,如果你想:

make -f Makefile.test all 

這將使用all目標無論它出現在Makefile文件。

如果您使用了GNU make,那麼你可以使用.DEFAULT_GOAL指定內部Makefile.test默認的目標,然後,你就不必擔心順序:

include ./Makefile.a 
all: a b c 
b: 
    @echo "b" 
c: 
    @echo "c" 

.DEFAULT_GOAL := all 

感謝Idelic的提醒對這個。

+3

如果使用GNU make,您還可以通過設置'.DEFAULT_GOAL:= all'來覆蓋'Makefile.test'中的默認目標。 – Idelic

+0

@Idelic:謝謝你的提醒,自從我做了一些認真的工作之後已經有一段時間了。 –

+0

對於清晰和明確的答案+1 –

相關問題