【问题标题】:Should a Makefile delete itself on 'make clean'?Makefile 是否应该在“make clean”时自行删除?
【发布时间】:2013-08-02 03:37:10
【问题描述】:

我有一个编写 Makefile 的 configure 脚本(来自 Makefile.in)。 clean 目标当前会删除从 makefile 中创建的所有内容,但它不会删除 makefile 本身。 (你可能知道我没有使用 Autotools)

因此我的问题是:makefile 是否也应自行删除,要求开发人员再次运行./configure

一方面,我希望干净的目标正确地清理源树。但是,另一方面,我希望能够在提交之前输入make clean test 来检查一切是否正常;再次运行配置脚本似乎有点奇怪。

【问题讨论】:

  • 这完全取决于你想要完成什么。如果生成文件的唯一目的是执行脚本,则删除生成文件。如果您想将 makefile 留给开发人员以后使用,或者出于审计目的,请不要删除它。

标签: makefile posix configure


【解决方案1】:

这是一个风格问题,而不是技术问题。寻找答案的最佳去处是automake manual,它会告诉你:

`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 创建的。

自动工具的一大优点是它们一致标准。最好不要因无视这些标准而激怒您的用户。

【讨论】:

    【解决方案2】:

    我可能有一个单独的目标。所以clean 会让他们能够再次构建,但distcleanrealcleanallclean 或其他东西会强制重新配置。您可以看到哪些自动工具清理目标(如果有)具有类似的行为。

    【讨论】:

    • The GNU coding standards 提及distcleanmaintainer-clean。但是,我不明白认为我理解与我的问题有关的文字。 (补充:直到阅读 MadScientist 的回答)
    • maintainer-clean 仅由运行 autoconf 的人员使用以生成配置脚本。它用于删除 autotools 生成的所有文件,其中包括 configure 本身,以及其他内容。通常,该目标甚至不包含在源包附带的 makefile 中,只有当您直接从源控制系统获取代码并在那里构建它时才可用(通常项目不会将 autoconf 输出作为源文件签入,所以您必须安装自动工具才能从 SCM 构建)。
    【解决方案3】:

    clean 目标的目的通常是删除临时文件,因此您可以从头开始编译。查看更多here

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

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2011-12-26
      • 2011-04-12
      • 1970-01-01
      • 2018-12-28
      相关资源
      最近更新 更多