我在目錄foo
中有一個makefile,並且希望在子目錄bar
中使用相同的makefile。我一直在做以下幾點:在一個單獨的目錄中使用相同的make文件
all:
<do work in foo>
cd bar;
make -f ../Makefile <target to make in bar>
當我嘗試做目標特定變量的值,因爲我需要在bar
調用make
當通過他們在命令行上這變得非常混亂。有沒有更乾淨的方法來做到這一點?
我在目錄foo
中有一個makefile,並且希望在子目錄bar
中使用相同的makefile。我一直在做以下幾點:在一個單獨的目錄中使用相同的make文件
all:
<do work in foo>
cd bar;
make -f ../Makefile <target to make in bar>
當我嘗試做目標特定變量的值,因爲我需要在bar
調用make
當通過他們在命令行上這變得非常混亂。有沒有更乾淨的方法來做到這一點?
在bar
到../Makefile
之間創建一個鏈接(硬或符號,您的選擇)。然後,正如卡爾在他的評論中指出的,你可以make -C bar
,一切都應該工作。 (從gmake 3.81開始,至少,先切換到新目錄,然後做它的事情,我不能說gmake 4.0。)
我無法從問題中判斷下列解決方案是否滿足您的需求,它可能 - 或者可能不 - 爲你工作。
如果你的情況是,你只是想要相同的Makefile
功能可用,include
可能是一個解決方案。您可以在目錄中,你做你需要具體到bar
一切bar
創建Makefile
,除此之外,你這樣做:
include ../foo/Makefile
買者!這不直接工作。不能有兩個同名的食譜。例如,如果你想foo/Makefile
爲all
做recipeBar
,並且要foo/Makefile
做recipeFoo
和recipeBar
爲all
,以下不起作用:
富/ 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
現在,如果你在運行bar
make
,它會運行recipeFoo
和recipeBar
。 如果序列對自己和recipeFoo
必須recipeBar
之前運行,使allBar
依賴allFoo
,像這樣的:如果你希望你的特定目標變量打電話時,請
.PHONY: all
all: allBar
.PHONY: allBar
allBar: allFoo
recipeBar
include foo/Makefile
:
酒吧/ Makefile文件另一個make
(爲此我推薦使用$(MAKE)
而不是make
),您可以導出變量 - 相應的後果(某些Windows版本的環境空間溢出風險,
例如,如果你有一個具體的目標變量FOO
在Makefile
目標all
,並希望在調用Submake.mak
當變量是已知的,它的工作原理是這樣的:
的Makefile:
all: export FOO:=bar
.PHONY: all
all:
$(MAKE) -f Submake.mak
Submake.mak:
.PHONY: all
all:
echo $(FOO)
'''讓-C bar'''相當於(在結果)作爲'''CD杆&& make''' – Carl 2014-09-25 23:02:02
這條規則(不能實際工作書面,但沒關係)在'foo'中調用make,並在'bar'中重新調用它自己。你想在'foo'或者'bar'中調用Make嗎? – Beta 2014-09-26 02:31:34
如果問題是通過子變量傳遞變量,那麼可能使用'$(MAKE)'在這裏有用處?這就是說,我實際上並沒有明白這裏需要什麼,或者目前的makefile實際上在做什麼(儘管看起來好像很糟糕)。 – 2014-10-02 19:21:01