我有以下makefile:
.ONESHELL:
SHELL := /bin/bash
build-%:
@[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
@echo ${DIR_ENV}
我试图提供DIR_ENV
,但没有运气。我知道每个执行的命令都在自己的shell中执行,所以没有共享变量。但是我添加了ONESHELL
指令。但它仍然无法奏效。我失踪了什么?
答案 0 :(得分:2)
您错过了首先通过make评估字符串${DIR_ENV}
并且结果值为空字符串的事实。使用此
build-%:
@[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
@echo $${DIR_ENV}
还有Make语法
$(if $(findstring -,$*),$(subst -,/,$*),$*)
Make中的if / then / else逻辑,而不是shell