2012-06-20 163 views
2

我有一個包含include語句的makefile。我無法控制包含的makefile的內容。不過,我希望能夠在「一些」(不是全部)目標之前添加一些預處理步驟。請看下面的例子:具有兩個具有相同名稱的目標的Makefile

install: 
     @echo "install target" 

include othermakefile.mk 

othermakefile.mk包含安裝目標爲好。如果我運行這個腳本,會發出警告並忽略第一個目標的安裝。

+0

然後將你的目標重命名爲不太可能發生衝突的東西(例如'foo_blah_install')。 –

+0

正如我所說的,當用戶輸入「make install」時,我希望腳本運行一些**預處理**命令。我不想更改目標的名稱。 – Javad

+0

相關:http://stackoverflow.com/q/1644920/86967 – nobar

回答

3

沒有什麼簡單:

install: pre_install 

.PHONY: pre_install 
pre_install: 
    do preinstallation things 

include othermakefile.mk 

編輯:
如果你想之前install或任何其preqs的運行pre_install,這裏是一個辦法。這是原油和醜陋,但它的工作:

install: pre_install 
    $(MAKE) -f othermakefile.mk [email protected] 

.PHONY: pre_install 
pre_install: 
    do preinstallation things 

注意,這並不一定會重建所有先決條件install,所以他們中的一些可能會留在自己的老態,而不是反映pre_install的影響。如果這還不夠好,你其他先決條件的所有之前要pre_install,你可以添加一個選項標誌:

install: pre_install 
    $(MAKE) --always-make -f othermakefile.mk [email protected] 

現在做將承擔所有目標都過時了,從地上重建(在pre_install之後)。

+1

+1。但是可以保證Make會按照從上到下的順序處理'install'的依賴關係嗎?即如果'othermakefile.mk'包含'install:foobar',是否可以保證''pre_install'在'foorbar'之前得到處理? –

+0

@OliCharlesworth:不,沒有這樣的保證; Make會在'install'之前建立'pre_install'(這是我讀的問題),但不一定在'install'的其他先決條件之前。 *有一種方法可以超越所有其他目標,但它更加激進。 – Beta

+0

你能告訴我如何*把它放在所有其他先決條件*之前? – Javad

相關問題