1

我有以下(非常简化的)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,有点危险,但有效。如果您知道更优雅的方式/方法,请告诉我。

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

4

2 回答 2

5

语法应该是

USER = $(shell logname)

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

$(eval USER=$$($MAKESH logname))

但是,$(eval ...) 函数只会将其转换为上面的第一种形式,因此这是浪费精力。(除非您真的尝试做一些比您的示例建议的更棘手的事情。)

于 2013-01-28T16:51:51.380 回答
2
MAKESH=shell
$(eval USER=$$($(MAKESH) logname))
$(info USER is $(USER))

尽可能避免。

于 2013-01-28T17:01:34.417 回答