Makefile:'make $ * clean'是什么意思?

时间:2015-03-13 05:35:42

标签: makefile

我知道make clean做了什么。

但是make $* clean做了什么?

我无法在任何地方找到明确的解释。

2 个答案:

答案 0 :(得分:6)

正如罗斯所说,我们无法提供帮助,因为您还没有提供足够的背景信息。您需要至少提供make $* clean出现的规则。

但是,我猜它看起来像这样:

%.xyz:
        make $* clean

此处,$*automatic variable,它将扩展到目标的主干(与模式中的%匹配的文本)。因此,如果您调用make foobar.xyz,此规则将调用make foobar clean:它将运行子制作,构建foobar目标,然后构建clean目标。

虽然我能想到这样做的原因,但我没有看到与上述相似的东西。更常见的是如果你错误输入命令并且它真的说make -C $* clean,给出这样的规则:

%.xyz:
        make -C $* clean

(请注意,在调用sub-make时,永远不会使用静态字符串make; 总是 使用$(MAKE)或{{ 1}})。在此示例中,运行${MAKE}将运行make foobar.xyz,这意味着更改到目录make -C foobar clean并在那里运行foobar目标。

答案 1 :(得分:1)

如果从shell脚本调用它,则$*将扩展为传递给shell脚本的参数。

#!/usr/bin/env bash
# filename clean.sh
make $* clean

上面的shell脚本可以像

一样调用
#./clean.sh --silent

最终会将--silent传递给make应用程序并执行以下命令。

#make --silent clean

最后,shell脚本中的$*由shell扩展,而不是由make应用程序扩展。