我有两个变量foo
和bar
,foo
将有一个值,而bar
可能有也可能没有。如果bar
有值,我想将它们连接在一起,并用连字符隔开。我有一些可以在bash中工作的东西:
$ foo=foo
$ bar=bar
$ case "${bar}" in "") echo $foo ;; *) echo ${foo}-${bar}; esac
foo-bar
$ unset bar
$ case "${bar}" in "") echo $foo ;; *) echo ${foo}-${bar}; esac
foo
到目前为止,一切都很好。现在,我想使用make的shell
function在Makefile中执行相同的操作,但是我无法弄清楚语法。这里演示了问题:
$ cat Makefile
foobar = $(shell $(case "$${bar}" in "") echo $${foo} ;; *) echo $${foo}-$${bar};; esac))
default:
echo ${foobar}
$ make
/bin/sh: -c: line 0: syntax error near unexpected token `;;'
/bin/sh: -c: line 0: `echo ${foo} ;; *'
echo echo ${foo}-${bar};; esac))
/bin/sh: -c: line 0: syntax error near unexpected token `;;'
/bin/sh: -c: line 0: `echo echo ${foo}-${bar};; esac))'
make: *** [default] Error 2
如何以这种方式将两个环境变量连接在一起,以便可以在我的Makefile中使用它们?
关于make
,我是一个完全的菜鸟,因此,如果我完全以错误的方式进行此操作,请告诉我。谢谢。
答案 0 :(得分:2)
您不需要运行子shell来连接一些变量:
foobar := $(foo)$(if $(bar),-,)$(bar)
default:
echo '$(foobar)'
应该可以正常工作。
答案 1 :(得分:1)
您可以在这样的变量中隐藏“用右括号括起来”:
cp=)
foobar:= $(shell case "$${bar}" in ""${cp} echo $${foo} ;; *${cp} echo $${foo}-$${bar};; esac)
default:
echo ${foobar}