在执行'make clean'时,是否应该让Makefile自我删除?

3
我有一个configure脚本,用于从Makefile.in生成Makefile。当前的clean目标会删除由makefile创建的所有内容,但不会删除makefile本身。(你可能已经发现我没有使用Autotools)
我的问题是:makefile是否也应该删除自己,需要开发人员再次运行./configure
一方面,我希望clean目标能够正确清理源代码树。但另一方面,我想输入make clean test来检查一切是否正常工作,然后进行提交;再次运行configure脚本似乎有点奇怪。

这完全取决于你想要实现什么。如果 makefile 的唯一目的是执行脚本,那么删除 makefile。如果你想留下 makefile 供开发人员以后使用或进行审计,则不要删除它。 - Robert Harvey
3个回答

9

这是一个风格问题,而不是技术问题。最好的解答地点是Automake手册,它会告诉你:

`make clean'
     Erase from the build tree the files built by `make all'.

`make distclean'
     Additionally erase anything `./configure' created.

因此,不应该让make clean删除Makefilemake distclean应该删除Makefile,因为它是由configure而不是make all创建的。
autotools最好的一点就是它们非常一致标准化。最好不要违反这些标准,以免惹恼您的用户。

2

我会为此单独设置一个目标。因此,clean 将使他们能够重新构建,但是 distcleanrealcleanallclean 等将强制重新配置。您可以查看哪个 autotools 的清理目标(如果有的话)具有类似的行为。


GNU编码标准提到了“distclean”和“maintainer-clean”。然而,我不认为我理解这段文字与我的问题有关。直到阅读MadScientist的答案之前。 - Stefano Palazzo
1
maintainer-clean 只被运行 autoconf 生成 configure 脚本的人使用。它用于删除由 autotools 生成的所有文件,包括 configure 本身和其他文件。通常该目标甚至不包含在随源代码包一起提供的 makefile 中,只有在直接从源代码控制系统获取代码并在那里构建时才可用(通常项目不会将 autoconf 输出作为源文件提交,因此必须安装 autotools 才能从 SCM 构建)。 - MadScientist

1

clean目标的目的通常是为了删除临时文件,以便您可以从头开始编译。更多信息请参见这里

例如,一个常见的makefile目标是“clean”,它通常执行清理编译器后的操作--删除对象文件和生成的可执行文件。


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