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

4

我知道make clean的作用。

但是make $* clean是什么意思呢?

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


1
这取决于上下文。你在哪里看到它? - Ross Ridge
很抱歉,我无法透露更多信息。感谢您的回答。 - padfoot
2个回答

11

正如Ross所说,由于您没有提供足够的上下文,我们无法提供帮助。您至少需要提供make $* clean出现的规则。

不过,我猜它看起来像这样:

%.xyz:
        make $* clean

这里,$*是一个自动变量,它会扩展为目标的词干(与模式中的%匹配的文本)。因此,如果您调用make foobar.xyz,这条规则将调用make foobar clean:它会运行一个子make,构建foobar目标,然后构建clean目标。

我还没有看到过类似上面的东西,尽管我可以想出理由来做。更常见的情况是,如果您输错了命令,它实际上应该是make -C $* clean,就像这样的规则:

%.xyz:
        make -C $* clean

请注意,在调用子make时,永远不要使用静态字符串make;你应该总是使用$(MAKE)${MAKE}。在这个例子中运行make foobar.xyz将运行make -C foobar clean,这意味着切换到目录foobar并在其中运行clean目标。


疯狂科学家。你的回答很有帮助!非常感谢! - padfoot

1
如果从shell脚本中调用它,则$*会扩展为传递给shell脚本的参数。
#!/usr/bin/env bash
# filename clean.sh
make $* clean

以上的 shell 脚本可以这样调用:

#./clean.sh --silent

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

#make --silent clean

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接