Taf*_*afT 6 packaging makefile compilation code-cleanup gnu-make
我并不总是写 make 文件,但是当我这样做时,我喜欢尝试把它们写好。试图使界面与其他开发人员可能期望的一致总是很困难的。我正在寻找的是所有常见的 make something clean (GNU) make 目标的摘要。
常见的清洁目标有哪些?
每个目标通常什么时候使用?
每个目标与其他目标相比如何?
我曾使用make clean,make clobber和make mrproper之前的系统。那些变得越来越极端;make clean只整理临时文件,make clobber摆脱大部分配置,make mrproper几乎回到刚刚签出的状态。这是正常的秩序吗?应该make mrproper始终删除生成的二进制文件和共享库以进行部署吗?
阅读建议将make distclean事情整理到准备制作分发包的程度。我想这会留下一些自动生成的版本标记文件、文件清单和共享库,但可能会删除您不想存档的临时文件?
make realclean当我在GNU MakeGoals 手册页上看到它时,它对我来说是全新的。正如它列出的那样distclean,clobber我猜它有类似的效果。我是否从未遇到过它,因为它是一个历史文物,或者只是我必须从事的一组项目的特定内容?
抱歉,这有点啰嗦。我找到了将一个目标与另一个目标进行比较的各种问题和答案,但似乎没有一个可以很好地概述。
试图根据一些研究形成我自己的答案。我认为严重程度的大致顺序是;mostlyclean, clean, maintainer-clean, mrproper,distclean和 finally clobber(结合distclean和uninstall)。
清洁
make clean是最基本的层次。它会清理大多数生成的文件,但不会清理任何记录配置的文件。 GNU Make 手册的目标页面指出:
删除通常通过运行 make 创建的所有文件。
此外,GNU Make 手册的标准目标页面阶段:
删除当前目录中通常通过构建程序创建的所有文件。如果其他目录中的文件是由这个 makefile 创建的,也删除它们。但是,不要删除记录配置的文件。还保留可以通过构建生成的文件,但通常不是因为分发随附。无需删除使用“mkdir -p”创建的父目录,因为它们本来可以存在的。
如果 .dvi 文件不是发行版的一部分,请在此处删除它们。
使大部分清洁
make mostlyclean 是我发现的唯一一种更温和的 clean 形式,它的行为类似于 clean 但留下的文件需要很长时间才能编译并且通常不需要重新生成。
像'clean',但可能不会删除一些人们通常不想重新编译的文件。例如,GCC 的“mostlyclean”目标不会删除 libgcc.a,因为很少需要重新编译它并且需要很多时间。
使 distclean
make distcleanmake clean在许多 GNU Make 系统上,这是从基础开始的第一步。它似乎是匿名的,或者至少与 withmake realclean和make clobber在许多但并非所有情况下非常相似。它将删除所做的一切make clean并删除配置。
在 Linux 系统中,这是一个超越的步骤make mrpropper,请参阅下面的部分了解详细信息。
我不确定这个名字是否意味着事情已经足够干净以进行分发(形成 tar 存档),或者该过程正在将它们返回到与分发内容相同的状态(就像解压 tar 后的情况一样)档案)。
这些目标中的任何一个都可能被定义为删除比“clean”更多的文件。例如,这会删除您通常为编译而创建的配置文件或链接,即使 makefile 本身无法创建这些文件。
此外,GNU Make 手册的标准目标页面阶段:
删除当前目录中(或由此生成文件创建的)中通过配置或构建程序创建的所有文件。如果您解压了源代码并构建了程序而不创建任何其他文件,'make distclean' 应该只保留发行版中的文件。但是,不需要删除使用“mkdir -p”创建的父目录,因为它们本来可以存在的。
进行卸载
make uninstall将卸载通过make install或其中一种install-*变体安装的软件。这类似于make clobber某些系统上的部分行为,但make uninstall不应随意接触构建区域make clobber。
删除所有已安装的文件 - 'install' 和 'install-*' 目标创建的副本。
此规则不应修改完成编译的目录,只修改安装文件的目录。
使维护者干净
make maintainer-clean似乎是从更常见的退一步make distclean。除了配置之外,它几乎删除了所有内容。这使它非常类似于make clean.
删除几乎所有可以用这个 Makefile 重建的东西。这通常包括 distclean 删除的所有内容,以及更多:Bison 生成的 C 源文件、标签表、信息文件等。
还强调的是,这不是一个常用的目标,因为它适用于特定的一组用户:
'maintainer-clean' 目标旨在由包的维护者使用,而不是由普通用户使用。
使先生正确
make mrproper似乎是一个Linux内核版本make distclean或make clobber。这还不够删除备份和补丁文件。它完成make clean目标所做的一切并去除配置。
我相信这个名字来自一种清洁产品,在美国称为Clean 先生,在英国称为 Flash(这就是为什么我没有听说过该产品的名称)。Linus Torvalds 是芬兰裔美国人,大概对 Propper 先生的品牌名称很熟悉。
在Linux内核的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
Run Code Online (Sandbox Code Playgroud)
搞砸
make clobber在Wikipedia 文章中也提到了 Clobbering。这也表明它比make clean甚至可能卸载软件更严重。make uninstall和的组合是可能的make distclean。
make clean 级别没有单一来源。随着事物随着时间的推移而发展,术语和行为是不一致的。以上是迄今为止我设法拼凑的最好的。
| 归档时间: |
|
| 查看次数: |
6145 次 |
| 最近记录: |