我正在使用GNU make和Makefiles。是否可以为一个构建步骤设置环境变量?
目前我正在做这样的事情:
VAR:=valueA
step1:
echo $(VAR)
然后,"制作第1步"将打印" valueA"。
是否可以为一个构建步骤重新定义env var?
VAR:=valueA
step1:
echo $(VAR)
step2:
VAR:=valueB
echo $(VAR)
我想"制作第1步"打印" valueA",但"制作step1"打印" valueB"。
答案 0 :(得分:5)
首先,那些不是环境变量,它们是变量。理解并记住差异非常重要。
其次,是的,您可以使用target-specific variables执行此操作:
VAR := valueA
step1:
echo $(VAR)
step2: VAR := valueB
step2:
echo $(VAR)
如果您确实希望该值存在于子进程的环境中,则可以使用make的export
关键字:
export VAR := valueA
step1:
echo $$VAR
答案 1 :(得分:0)
补充MadScientist的答案: 如果您确实需要设置 environment 变量,因为您调用的命令需要设置它,您需要在recipe s的shell命令中执行此操作:
VAR := value0
all: step1 step2
step1: VAR := value1
step2: VAR := value2
all step1 step2 step3:
ENVVAR=$(VAR) sh -c 'echo the nested sh for $@ has ENVVAR = $$ENVVAR'