Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 在规则中设置变量并使其在另一个规则中可用_Makefile - Fatal编程技术网

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-,/,$*)”语句替换。