2014-09-25 33 views
3

我在目錄foo中有一個makefile,並且希望在子目錄bar中使用相同的makefile。我一直在做以下幾點:在一個單獨的目錄中使用相同的make文件

all: 
    <do work in foo> 
    cd bar; 
    make -f ../Makefile <target to make in bar> 

當我嘗試做目標特定變量的值,因爲我需要在bar調用make當通過他們在命令行上這變得非常混亂。有沒有更乾淨的方法來做到這一點?

+0

'''讓-C bar'''相當於(在結果)作爲'''CD杆&& make''' – Carl 2014-09-25 23:02:02

+0

這條規則(不能實際工作書面,但沒關係)在'foo'中調用make,並在'bar'中重新調用它自己。你想在'foo'或者'bar'中調用Make嗎? – Beta 2014-09-26 02:31:34

+0

如果問題是通過子變量傳遞變量,那麼可能使用'$(MAKE)'在這裏有用處?這就是說,我實際上並沒有明白這裏需要什麼,或者目前的makefile實際上在做什麼(儘管看起來好像很糟糕)。 – 2014-10-02 19:21:01

回答

0

bar../Makefile之間創建一個鏈接(硬或符號,您的選擇)。然後,正如卡爾在他的評論中指出的,你可以make -C bar,一切都應該工作。 (從gmake 3.81開始,至少,先切換到新目錄,然後做它的事情,我不能說gmake 4.0。)

1

我無法從問題中判斷下列解決方案是否滿足您的需求,它可能 - 或者可能不 - 爲你工作。

如果你的情況是,你只是想要相同的Makefile功能可用,include可能是一個解決方案。您可以在目錄中,你做你需要具體到bar一切bar創建Makefile,除此之外,你這樣做:

include ../foo/Makefile 

買者!這不直接工作。不能有兩個同名的食譜。例如,如果你想foo/MakefileallrecipeBar,並且要foo/MakefilerecipeFoorecipeBarall以下不起作用

富/ Makefile文件:

.PHONY: all 
all: 
    recipeFoo 

酒吧/ Makefile:

.PHONY: all 
all: 
    reciveBar 

include foo/Makefile 

取而代之的是,配方必須分成獨特的n埃姆斯。但是,依賴關係規則可能存在多次,所以解決此警告並不是真正的挑戰。所以,下面的工作:

富/ Makefile文件:

.PHONY: all 
all: allFoo 

.PHONY: allFoo 
allFoo: 
    recipeFoo 

酒吧/ Makefile文件:

.PHONY: all 
all: allBar 

.PHONY: allBar 
allBar: 
    recipeBar 

include foo/Makefile 

現在,如果你在運行barmake,它會運行recipeFoorecipeBar。 如果序列對自己和recipeFoo必須recipeBar之前運行,使allBar依賴allFoo,像這樣的:如果你希望你的特定目標變量打電話時,請

.PHONY: all 
all: allBar 

.PHONY: allBar 
allBar: allFoo 
    recipeBar 

include foo/Makefile 

酒吧/ Makefile文件另一個make(爲此我推薦使用$(MAKE)而不是make),您可以導出變量 - 相應的後果(某些Windows版本的環境空間溢出風險,

例如,如果你有一個具體的目標變量FOOMakefile目標all,並希望在調用Submake.mak當變量是已知的,它的工作原理是這樣的:

的Makefile:

all: export FOO:=bar 
.PHONY: all 
all: 
    $(MAKE) -f Submake.mak 

Submake.mak:

.PHONY: all 
all: 
    echo $(FOO) 
相關問題