在规则中设置变量并使其在另一个规则中可用

时间:2018-03-22 15:11:18

标签: makefile

我有以下makefile:

.ONESHELL:

SHELL := /bin/bash

build-%:
        @[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
        @echo ${DIR_ENV}

我试图提供DIR_ENV,但没有运气。我知道每个执行的命令都在自己的shell中执行,所以没有共享变量。但是我添加了ONESHELL指令。但它仍然无法奏效。我失踪了什么?

1 个答案:

答案 0 :(得分:2)

您错过了首先通过make评估字符串${DIR_ENV}并且结果值为空字符串的事实。使用此

build-%:
        @[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
        @echo $${DIR_ENV}

还有Make语法

$(if $(findstring -,$*),$(subst -,/,$*),$*)

Make中的if / then / else逻辑,而不是shell