代码之家  ›  专栏  ›  技术社区  ›  TafT

makeclean、makeclobber、makedistclean、makemrproper和makerealclean之间有什么区别?

  •  1
  • TafT  · 技术社区  · 7 年前

    常见的清洁目标是什么?

    每个目标与其他目标相比如何?


    make clean , make clobber make mrproper 以前。那些人越来越外向; 使干净 只是整理临时物品, 摆脱大多数配置和 清除旧目标文件和配置 几乎要回到刚刚结帐的状态了。这是正常的秩序吗?应该 清除旧目标文件和配置

    四处阅读表明 make distclean 整理东西,准备制作分发包。我可以想象,会留下一些自动生成的版本标记文件、文件清单和共享库,但可能会去掉您不希望存档的临时文件?

    make realclean 当我在电视上看到它的时候,它对我来说是全新的 GNU Make Goals manual page . 如清单所示 distclean clobber 我猜它也有类似的效果。我从来没有见过它,因为它是一个历史文物或只是相当具体的一套项目,我必须工作?


    对不起,那有点漫无边际。我发现了各种各样的问题和答案,可以将一个目标与另一个目标进行比较,但没有一个能给出一个很好的概述。

    1 回复  |  直到 5 年前
        1
  •  7
  •   TafT    7 年前

    试图在一些研究的基础上形成自己的答案。我认为严重程度的大致顺序是; mostlyclean clean maintainer-clean , mrproper distclean 最后呢 clobber 蒸馏清洁 uninstall

    使干净

    make clean GNU Make Manual's Goals page 国家:

    删除通常通过运行make创建的所有文件。

    此外,还有 GNU Make Manual's Standard Targets page 阶段:

    删除当前目录中通常通过生成程序创建的所有文件。如果其他目录中的文件是由这个makefile创建的,也可以删除它们。但是,不要删除记录配置的文件。还可以保存可以通过构建生成的文件,但通常不会,因为分发版附带了这些文件。不需要删除用mkdir-p创建的父目录,因为它们本来就可以存在。

    使最干净

    make mostlyclean 是我发现的唯一一种更温和的clean形式,它的行为类似于clean,但留下的文件需要很长时间才能编译,并且不需要经常重新生成。

    这个 阶段:

    喜欢clean,但是可以避免删除一些人们通常不想重新编译的文件。例如,GCC的mostlyclean目标不会删除libgcc.a,因为重新编译libgcc.a几乎没有必要,而且需要花费大量时间。

    使蒸馏器干净

    make distclean 是从基本 使干净 在许多GNU-Make系统上。它似乎是化名或至少非常类似与 make realclean make clobber 在许多情况下,但不是所有情况下。它会删除所有 执行并删除配置。

    在Linux系统中,这是一个更进一步的步骤 make mrpropper ,有关详细信息,请参见下面的部分。

    GNU制作手册的目标页

    这些目标中的任何一个都可能被定义为比clean删除更多的文件。例如,这将删除通常作为编译准备创建的配置文件或链接,即使makefile本身无法创建这些文件。

    此外,还有 GNU制造手册的标准目标页

    删除当前目录中(或由此makefile创建的)通过配置或生成程序创建的所有文件。如果您已经解压了源代码并构建了程序,而没有创建任何其他文件,makedistclean应该只保留分发版中的文件。但是,不需要删除用mkdir-p创建的父目录,因为它们本来就可以存在。

    使卸载

    make uninstall make install 或者一个 install-* 制造冲击波 在某些系统上,但是 制造冲击波 威尔。

    这个 GNU制造手册的标准目标页 阶段:

    此规则不应修改完成编译的目录,只应修改安装文件的目录。

    make maintainer-clean 似乎比更常见的 . 它几乎删除了除配置之外的所有内容。这使得它非常类似于 使干净 .

    GNU制造手册的标准目标页

    删除几乎所有可以用这个Makefile重建的东西。这通常包括distclean删除的所有内容,以及Bison生成的更多:C源文件、标记表、信息文件等等。

    还需要强调的是,这不是一个常用的目标,因为它针对的是一组特定的用户:

    maintainer clean目标是由包的维护人员使用的,而不是由普通用户使用的。

    清除旧目标文件和配置

    make mrproper 使蒸馏器干净 . 这就停止了删除备份和补丁文件。它所做的一切 使干净 目标不执行并删除配置。

    Mr. Clean 而英国则是Flash(这就是为什么我没有听说过这个产品的名字)。身为芬裔美国人的莱纳斯·托瓦尔兹大概对普洛普先生的品牌很熟悉。

    Linux Kernel Makefile 国家:

    # Cleaning is done on three levels.
    # make clean     Delete most generated files
    #                Leave enough to build external modules
    # make mrproper  Delete the current configuration, and all generated files
    # make distclean Remove editor backup files, patch leftover files and the like
    

    制造冲击波 有人提到 Wikipedia article for Clobbering 我也是。这也说明它比 使干净 ,可能是一个甚至卸载软件。有可能是


    没有单一的来源,使清洁水平。随着时间的推移,术语和行为是不一致的。以上是我迄今为止拼凑出的最好的一篇。

    推荐文章