我有以下(非常简化)Makefile:
# Makefile
MAKESH=shell
USER=$($MAKESH logname)
旨在将我的登录名存储在USER
变量中,就好像调用了$(shell logname)
命令一样。然而,这不会发生。我怀疑这是由于make
评估变量的方式。
有没有人对这个或可能的解决方法有更深入的了解,即明确告诉make
$MAKESH
实际上是shell
命令?
感谢。
考虑以下示例:
#parent.mk
...
include child.mk
...
-------------------
#child.mk
export $(shell logname)/path1
export $(shell logname)/path2
-------------------
#bash_script.sh
...
source child.mk
...
(在此示例中,采购child.mk失败)
基本上,我想要做的是创建一个根据当前用户导出路径名的文件。语法应该对makefile和bash脚本都有效,因为它可以从两个地方包含/来源。
我还想对这些文件进行细微的更改,因为它们是较大项目的一部分,并且互连有点令人困惑。
我终于决定采用这个:
#parent.mk
...
export logname=$(shell logname)
include child.mk
...
-------------------
#child.mk
export $(logname)/path1
export $(logname)/path2
-------------------
#bash_script.sh
...
source child.mk
...
这是非常hacky,有点危险,但有效。如果您知道更优雅的方式/方式,请告诉我。
最后,感谢您提供的解决方案(和您的警告),这些解决方案对预编辑的问题有效。
答案 0 :(得分:5)
语法应为
USER = $(shell logname)
我不知道你为什么要把“shell”放在变量中并搞砸了函数语法,但如果你真的坚持,试试这个:
$(eval USER=$$($MAKESH logname))
$(eval ...)函数只会把它变成上面的第一个形式,所以这是浪费精力。 (除非你真的想做一些比你的例子更难的事情。)
答案 1 :(得分:2)
MAKESH=shell
$(eval USER=$$($(MAKESH) logname))
$(info USER is $(USER))
尽可能避免。