2010-07-12 69 views
1

從GNU製作手冊:GNU Make:如何將SHELL變量導出爲子版本?

make變量SHELL 不外傳的價值。相反,調用 環境中的SHELL變量的值 傳遞給子make。 您可以使用下面介紹的導出 指令強制make爲SHELL導出其值 。

我必須做一些錯誤的,或者不讀手冊正確,因爲這個簡單的例子不工作:

# ./Makefile 
export SHELL := /bin/bash 
export VALUE := exported_variable 
$(info root makefile SHELL=$(SHELL)) 
call_sub_make: 
    $(MAKE) --directory=subdir 

而且子目錄/ Makefile文件:

$(info subdir makefile SHELL=$(SHELL)) 
$(info subdir makefile VALUE=$(VALUE)) 
do_nothing: 

輸出:

$ env | grep SHELL 
SHELL=/bin/bash 
$ make --version 
GNU Make 3.81 
$ make 
root makefile SHELL=/bin/bash 
make --directory=subdir 
subdir makefile SHELL=/bin/sh 
subdir makefile VALUE=exported_variable 
make[1]: Entering directory `/home/drtwox/C/make/export_shell/subdir' 
make[1]: Nothing to be done for `do_nothing'. 
make[1]: Leaving directory `/home/drtwox/C/make/export_shell/subdir' 

VALUE被導出,爲什麼不是貝殼?

回答

2

SHELL出口(到子make的環境)好的,但也the manual

不像大多數變量,該變量SHELL永遠不會從環境設置。

如果你想影響SHELL的子化妝的想法,你就必須做這樣的:

call_sub_make: 
    $(MAKE) --directory=subdir SHELL=$(SHELL)