2011-04-25 26 views
4

考慮:GNU做:建立各種渠道在不同的目錄

programs := apps/prog1 apps/prog2  # the actual list is quite long 
sources := src/prog1.cpp src/prog2.cpp # showing only 2 files 

make文件包含了2個目標releasedebug。每個目標應在bin/目錄中構建每個程序,並將目標名稱附加到文件名中。

例如,建築release應創建bin/prog1_releasebin/prog2_release

如何編寫靜態模式規則來做到這一點?

謝謝。

+0

是每個可執行文件從一個單一的編譯C++源文件? – 2011-04-25 13:12:33

+0

不,porg_i編譯自prog_i.cpp – pic11 2011-04-25 13:38:06

+0

我的意思是說在.cpp文件和可執行文件之間總是有1對1的內核響應。 – 2011-04-25 14:01:29

回答

3

這將做到這一點(在gnumake的3.81):

BINS := $(patsubst apps/%,bin/%,$(programs)) # bin/prog1 bin/prog2 ... 
release_bins := $(addsuffix _release,$(BINS)) # bin/prog1_release ... 
debug_bins := $(addsuffix _debug,$(BINS))  # bin/prog1_debug ... 

$(release_bins): bin/%_release: src/%.cpp 
    #build the binaries according to the release rule 

$(debug_bins): bin/%_debug: src/%.cpp 
    #build the binaries according to the debug rule 

release: $(release_bins) 

debug: $(debug_bins) 

.PHONY: release debug 

# If it turns out that one of the progs needs something else too: 
bin/prog20_debug: somethingElse.cpp 

(有辦法讓這個稍微更簡潔,但在清晰的成本。)