如何从shell脚本将字符串传递给makefile?

时间:2017-12-04 07:55:34

标签: shell makefile

我尝试了以下方式

在shell脚本中:

Var='abc xyz' make one myvar=$Var

但是当它进入makefile时,它只显示myvarabc,但它没有将abc xyz作为我的输入

2 个答案:

答案 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的进程实际上接收两个参数而不是一个参数代替命令行变量:

  1. myvar=abc
  2. xyz
  3. 解决方案

    你需要占用空间,以便它不被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