2013-09-30 41 views
0

我想根據是否在生成文件上運行make devmake prod來運行不同版本的乾淨目標。如何根據目標變量(Makefile)有條件地調用目標?

我沒有任何編譯本身,只是要有條件地基於可變特定目標或設定的目標,例如:

ifeq ($(BUILD_ENV),"development") 
clean: -clean 
else 
clean: -clean-info 
endif 

#--------------------------------- 
dev: BUILD_ENV = development 
dev: dev-setup which-env 

#--------------------------------- 
prod: BUILD_ENV = production 
prod: prod-setup which-env 

#--------------------------------- 


which-env: clean 
    @echo -e "$(GREEN)$(BUILD_ENV)!$(CLEAR)" 

-clean: -clean-info -clean-logs | silent 
    @echo -e "$(GREEN)</CLEAN>$(CLEAR)" 

-clean-info: 
    @echo -e "$(GREEN)<CLEAN>...$(CLEAR)" 

-clean-logs: 
    @echo -e " $(GREY)Removing log and status files $(CLEAR)"; 
    @if [ -d .stat ]; then rm -rf .stat; fi 
    @rm -f *.log || true 

有沒有辦法用Makefile中做到這一點?我還沒有發現任何說明這個用例的東西。

我並不是想要專門清理任何東西或建立任何東西,這只是我試圖有條件地調用一組目標的一個例子。實際的目標可能是其他任何事情。

+0

我不太明白你想要什麼。你想在運行'make dev'或'make prod'時運行適當的'clean'目標?但是,這不僅僅是清理你剛纔創建的東西嗎?或者,你是否試圖說當你運行'make clean'時,你想根據你最後運行的任何一個運行目標版本,無論是'make dev'還是'make prod'? – MadScientist

+0

@MadScientist - 這僅僅是一個例子 - 不要陷入特定的乾淨命令,我只寫這個來證明我試圖用目標做什麼。在這種情況下,我只想運行乾淨的目標,如果BUILD_ENV變量設置爲開發,或者只是乾淨的信息,否則。 (我只是想根據變量的值調用一組特定的目標)。 – qodeninja

回答

2

這不是完全清楚什麼你問的是你真正想要的東西,但在這裏有雲:

all: 

ifeq ($(BUILD_ENV),development) 
all: clean-dev 
else 
all: clean-other 
endif 

clean-dev: 
    @echo running [email protected], doing something 

clean-other: 
    @echo running [email protected], doing something else 

如果運行make BUILD_ENV=development,你會得到的東西;如果你跑makemake BUILD_ENV=production你會得到別的東西。

+0

也許代碼是誤導性的 - 我想要的只是運行dang條件目標!我試着做你上面列出的內容,但沒有奏效。也許它是我運行的make版本(osx/homebrew) – qodeninja

+0

@qodeninja:[facepalm]上面的例子和GNUMake 3.81一樣,但是如果你運行一個自制的Make工具,你可能會得到奇怪的結果。聽起來好像唯一可以回答關於你版本的問題的人就是你。 – Beta

+0

謝謝! GNU Make 3.81 Copyright(C)2006 Free Software Foundation,Inc. 這是免費軟件;請參閱複製條件的來源。 沒有保修;甚至不適用於適銷性或特定用途的適用性。 此程序爲i386-apple-darwin11.3.0 – qodeninja