Shell命令作为Makefile中的变量

1 shell makefile

我有以下(非常简化)Makefile:

# Makefile

MAKESH=shell
USER=$($MAKESH logname)
Run Code Online (Sandbox Code Playgroud)

其目的是将我的登录名存储在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
...
Run Code Online (Sandbox Code Playgroud)

(在此示例中,采购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
...
Run Code Online (Sandbox Code Playgroud)

这是非常hacky,有点危险,但工作.如果您知道更优雅的方式/方式,请告诉我.

最后,感谢您提供的解决方案(和您的警告),这些解决方案对预编辑的问题有效.

Wil*_*iam 5

语法应该是

USER = $(shell logname)
Run Code Online (Sandbox Code Playgroud)

我不知道你为什么要把"shell"放在变量中并搞砸了函数语法,但如果你真的坚持,试试这个:

$(eval USER=$$($MAKESH logname))
Run Code Online (Sandbox Code Playgroud)

$(eval ...)函数只会把它变成上面的第一个形式,所以这是浪费精力.(除非你真的想做一些比你的例子更难的事情.)