Makefile 在规则中设置变量并使其在另一个规则中可用
我有以下生成文件:Makefile 在规则中设置变量并使其在另一个规则中可用,makefile,Makefile,我有以下生成文件: .ONESHELL: SHELL := /bin/bash build-%: @[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$* @echo ${DIR_ENV} 我正在尝试使用DIR\u ENV,但运气不好。我知道执行的每个命令都是在自己的shell中执行的,因此不需要共享变量。但是,我添加了ONESHELL指令。但它仍然不起作用。我缺少什么
.ONESHELL:
SHELL := /bin/bash
build-%:
@[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
@echo ${DIR_ENV}
我正在尝试使用
DIR\u ENV
,但运气不好。我知道执行的每个命令都是在自己的shell中执行的,因此不需要共享变量。但是,我添加了ONESHELL
指令。但它仍然不起作用。我缺少什么?您缺少字符串${DIR_ENV}
是由make first计算的,结果值是空字符串。用这个
build-%:
@[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
@echo $${DIR_ENV}
还有Make语法
$(if $(findstring -,$*),$(subst -,/,$*),$*)
Make中的if/then/else逻辑,而不是shell,您缺少字符串
${DIR_ENV}
是由Make first计算的,结果值是空字符串。用这个
build-%:
@[ $(findstring -, $*) ] && DIR_ENV=$(subst -,/,$*) || DIR_ENV=$*
@echo $${DIR_ENV}
还有Make语法
$(if $(findstring -,$*),$(subst -,/,$*),$*)
if/then/else逻辑是否在Make中,而不是shell中1)您希望
DIR\u ENV
在使用该规则的其他命令中可用,还是在其他规则中可用?2) 您使用的是哪个版本的Make?3) 将echo
命令放在第一行(例如DIR\u ENV=foo;echo${DIR\u ENV}
)时会发生什么情况?4) 您是否尝试过将“$”加倍(echo${DIR_ENV}
)?1)您希望DIR_ENV
在使用该规则的其他命令中可用,还是在其他规则中可用?2) 您使用的是哪个版本的Make?3) 将echo
命令放在第一行(例如DIR\u ENV=foo;echo${DIR\u ENV}
)时会发生什么情况?4) 你试过把“$”(echo${DIR_ENV}
)翻一番吗?我在想午饭时整个if/then/else可以用一个@echo'$(subst-,/,$*)语句替换。我在想午饭时整个if/then/else可以用一个@echo'$(subst-,/,$*)”语句替换。