2016-08-12 59 views
3

我有這樣的makefile文件如何傳遞ENV變量之間的make目標

target1: 
     export var1=test 
     $(MAKE) target2 

target2: 
     echo $(var1) 

這就要爲空

我有其他depencies,所以我想設置的變量在第一目標,然後所有孩子的依賴關係應該能夠訪問

編輯:

.ONESHELL: 

target1: 
     export var1=test 
     echo $(var1) 

OUTP UT

make target1 
export var1=test 
echo 
+0

根據https://www.gnu.org/softwar,你所擁有的是正確的E /製作/手動/ html_node/Variables_002fRecursion.html。請發佈一個最小的,完整的,可驗證的Makefile來展示你所看到的問題。 – ruakh

+1

'$(var1)'是一個make變量,而不是一個環境變量。你是否試圖使'echo $$ {var1}工作? –

+0

@WilliamPursell對不起,這是我的錯誤,它不工作,我試圖將它的一切作爲'回聲空白'。如果我確認echo $$ {var1},那麼它也是空的 – Karl

回答

6

作出缺席調用每個配方一個新的外殼的環境中,在第一行的export ED變量是在範圍上並不用於第二。

您可以通過多種方式解決這個問題:

出口與化妝的export指示變量

target1: export var1 := test 
target1: 
    $(MAKE) target2 

使用make命令行變量賦值

target1: 
    $(MAKE) target2 var1=test 

使用shell命令變量的賦值

target1: 
    var1=test $(MAKE) target2 

合併兩個命令在一個單一的配方

target1: 
    export var1=test; $(MAKE) target2 

的力量使所有的食譜傳遞給同一個shell實例

.ONESHELL: 

target1: 
    export var1=test 
    $(make) target2 
+0

我試過你的例子,並在第二行我輸入'echo $(var1)'它來作爲空白 – Karl

+0

@Karl發佈正是你在什麼地方嘗試。 – user657267

+1

@Karl您使用的是什麼版本的產品?在3.82中增加了「ONESHELL」。如果您使用的是舊版本,則需要升級或使用其他方法之一。 – user657267