【发布时间】:2021-02-19 07:56:14
【问题描述】:
我有一个 Makefile,它包含一个目标来打印给定的变量:
print-%:
@echo $*=$($*)
例如要打印变量CURDIR 的值,我只需发出以下命令:
make print-CURDIR
结果如下:
CURDIR=/Users/j3d/Projects/myproject
现在我想创建一个 shell 脚本,其中包含一组可以从任何 Makefile... 调用的常用函数,这是上面目标的修改版本:
print-%:
. ./make-util printvar $@
这里是make-util:
#!/bin/sh
printvar()
{
@echo $*=$(*)
}
最后,运行上面的脚本……
j3d@j3ds-macbook-pro myproject % make print-CURDIR
... 没有产生预期的结果:
. ./make-utils CURDIR
我应该如何调用脚本函数才能正确打印给定的变量?
【问题讨论】:
-
你不能。 Makefile 不是 shell 脚本,shell 脚本也不是 makefile。 Make 通过首先扩展要调用的命令来工作:它将其视为文本字符串并扩展变量。然后,make 启动一个单独的 shell 进程并将扩展文本交给它,让 shell 运行并等待 shell 退出。 shell 无法访问 make 变量,因为它在一个单独的进程中,并且它无法“要求”make 为其提供一些变量(这将如何工作?)
-
哦,我明白了...我只是想避免在每个 Makefile 中一遍又一遍地重复相同的任务。