Makefile中的括号$()和大括号$ {}语法之间存在差异。但我不知道为什么

时间:2016-04-26 07:40:55

标签: makefile

我的makefile的第一个版本

foreach($array as $key => $value){
  $result_array_1[] = $key;

  foreach($value as $ $val){
    $result_array_2[] = $val;
  }
}

我执行它并且它不起作用

func:
    $(call exec-on-changed-file, "$$(DIR)")

define exec-on-changed-file
    DIR=GOOD;echo $(1)
endef

我对这个makefile(括号与括号)进行了更改

$ make func
DIR=GOOD;echo  "$(DIR)"
/bin/sh: 1: DIR: not found

我执行它并且它有效。

func:
    $(call exec-on-changed-file, "$${DIR}")

define exec-on-changed-file
    DIR=GOOD;echo $(1)
endef

你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:4)

正如您的输出所示,当您使用$$(DIR)时, shell看到$(DIR),这是运行命令 DIR的有效shell语法,但不存在。

当您使用$${DIR}时,shell会看到${DIR},这是变量 DIR的有效shell语法。

$$中的call扩展为$