如何使用多行变量

时间:2014-02-06 08:23:31

标签: linux makefile gnu-make

如何在食谱中使用多行变量?

file-name:multiple-line-variable

define foo =
echo welcome
endef

export foo

all:
    echo $(foo)

我得到以下输出。但我希望“欢迎”打印。

$ make -f multiple-line-variable
echo 

2 个答案:

答案 0 :(得分:1)

SunEric的回答没有正确解释发生了什么。添加或不添加@与您没有看到“欢迎”打印的原因完全无关。

您的原始示例无法按预期工作的原因是因为您正在阅读最新版GNU make(目前是GNU make 4.0)的GNU make手册,可能使用在线手册,但您正在使用一个更老的GNU版本。这不是一个好主意,因为手册中讨论的功能在您正在使用的GNU版本中不存在。

在这种情况下,变量定义的样式在名称后添加赋值运算符:

define foo =
  ...
在GNU make 3.82之前

不可用。在之前的make版本中,此语法定义了一个名为foo =的变量。因此,打印$(foo)不会显示任何内容,因为未定义变量foo

GNU make将其用户手册作为发行版的一部分提供:您应该始终阅读您正在使用的GNU版本附带的手册版本,而不是其他版本。

此外,在任一方法中都不需要export foo变量,因为您在配方中使用了make语法,因此shell永远不会看到对{{1}的任何引用变量。

答案 1 :(得分:0)

试试这个,

define foo  
welcome
endef
export foo
all:
      @echo $(foo) // Change is here