我尝试了以下方式
在shell脚本中:
Var='abc xyz' make one myvar=$Var
但是当它进入makefile时,它只显示myvar
为abc
,但它没有将abc xyz
作为我的输入
答案 0 :(得分:0)
Var='abc xyz' make one myvar=$Var
首先,在展开上面一行中的Var
变量时,可能扩展未定义变量(即:Var
)。上面的代码就是将一个名为Var
的环境变量与该值一起传递给将要运行make
的进程。
出于同样的原因,以下行可能不会打印" Hello World"除非先前使用该值定义Var
:
Var='Hello World' echo $Var
然而,以下行将显示" Hello World":
Var='Hello World'; echo $Var
上面这些例子中的 $Var
正在被shell扩展。运行echo
的进程会收到Var
变量,而不是shell。
但是当它进入makefile时它只显示
myvar
为abc,但它没有将abc xyz作为我的输入
该行
Var='abc xyz'; make one myvar=$Var
shell将扩展为:
Var='abc xyz'; make one myvar=abc xyz
上面的空格用作命令行参数的分隔符,因此运行make
的进程实际上接收两个参数而不是一个参数代替命令行变量:
myvar=abc
xyz
你需要占用空间,以便它不被shell解释为参数分隔符。您可以通过在$Var
附近放置双引号来实现此目的:
Var='abc xyz'; make one myvar="$Var"
这样,运行make
的进程将收到命令行变量的单个参数:myvar=abc xyz
。
答案 1 :(得分:0)
您是否有理由将其传递给环境?如,
.PHONY: all
all: DEBUG
.PHONY: DEBUG
DEBUG:
@echo $(test)
产量
$ test="this is a test" make DEBUG
this is a test