2013-04-03 45 views
0

我希望make過程僅在第一個目標上執行條件回顯 在以下makefile中,它應該只打印'a','b'或'goal'
目前,既然L不會被修改,它會打印任何執行的目標。修改生成文件中的變量

我已經用外部臨時文件和腳本完成了它,但是我想知道它是否完全沒有外部文件/腳本?

L=1 

goal: a b 
ifeq ($(L),1) 
     @echo goal 
     @L=0 
endif 
     @echo done > goal 

a: 
ifeq ($(L),1) 
     @echo a 
     @L=0 
endif 
     @echo done > a 

b: 
ifeq ($(L),1) 
     @echo b 
     @L=0 
endif 
     @echo done > b 

回答

0

不能IFEQ等使用,因爲這些都是預處理聲明:它們被執行的生成文件在讀取

在傳統的化妝是沒有辦法做你想要什麼,除了通過腳本和文件,就像你所做的一樣。如果你願意成爲GNU特定的,並且要求GNU版本足夠支持$(eval ...)函數,那麼你可以做到這一點;類似於:

SHOW := true 
goal: a b 
     $(if $(SHOW),@echo goal $(eval SHOW :=)) 
     @echo done > goal 
a: 
     $(if $(SHOW),@echo a $(eval SHOW :=)) 
     @echo done > a 
b: 
     $(if $(SHOW),@echo b $(eval SHOW :=)) 
     @echo done > b 
+0

完美。謝謝。 – Photon