2012-12-17 115 views
4

我試圖參數化我的生成文件目標。目前,它有一個如何從一個生成文件構建多個目標

TARGET = main 

聲明靠近頂部。它從中導出了SRC列表以及許多其他的事情。

雖然我已經改變了我的C代碼,所以我有多個不同的頂級.c文件基本上獲得變體構建。因此,我希望能夠做的是基本上做

make target1 

make target2 

並改變什麼TARGET在Makefile中設置。我很困惑如何做到這一點。我想我可能會添加類似於

target1: all 
    TARGET=target1 

雖然這似乎並沒有工作得太好。是否有這樣一個普通模式?

回答

3

參數變量名和特定目標變量可以做你想做的,作爲一個特定目標變量的值通常是由該目標的prereqs「繼承」(假設你使用GNU使):

target1_SRC=123 456 
target2_SRC=abc def 

target1: TARGET=target1 
target2: TARGET=target2 

target1: all 
target2: all 

all: ; @echo $($(TARGET)_SRC) 

然後你可以運行make target1make target2,例如:

$ make target1 
123 456 
$ make target2 
abc def 
8

我會建議只是拼出你的目標在Makefile中作爲單獨的目標:

all: target1 target2 

OTHER_OBJS = misca.o miscb.o miscc.o 

target1: target1.o $(OTHER_OBJS) 

target2: target2.o $(OTHER_OBJS) 

然後make,make target1,make target2等都會做你想要的。

你說你的makefile「以[$(TARGET)]爲基礎推導出SRC列表」,但這可能是一種有趣的嘗試,而不是像上面那樣以低科技的方式明確列出目標文件。使用不同的使得目標可以說是Make的一般模式,用於產生不同的結果。

相關問題