make clean和make distclean之间的区别


25

我从带有帮助页面的来源安装了ffmpeg。 https://trac.ffmpeg.org/wiki/CentosCompilationGuide

我注意到本教程中的大多数都make distclean在之后make install。但是make clean安装后仅libvpx会调用。

根据该文档, http: //www.gnu.org/software/automake/manual/automake.html#Clean make clean删除所有make创建的文件,并删除所有创建的make distclean文件./configure。

弄干净

从构建树中删除由make all构建的文件。

使distclean

另外,删除所有创建的./configure。

我知道make distclean需要下一次安装,但是我不明白为什么make clean在安装后会被调用。

安装的ffmpeg可以正常工作。所以我问这个问题是因为我只想提高对Linux的了解。有人给我一个解释会很有帮助。


2
安装后将调用Make clean进行清理。如果您同时拥有源代码(因此可以重新创建它们)和已安装的程序,则无需将编译版本保留在编译目录中。
— 亨内斯

Answers:


27

之后使用的参数make仅取决于编写的开发人员Makefile。您以后参考的文档Autotools只是创建的许多方法之一Makefile。

典型的标准是make clean将删除所有中间文件,make distclean并使该树的结构与未解压缩(或相当接近)时的状态相同,包括删除任何配置脚本输出。例如,这就是Linux内核的工作方式。

换句话说,它是完全依赖于开发人员为每个库的,这就是为什么有时候它clean和其他时间的distclean。顺便说一句,你不需要跑clean/ distclean-我想他们有你运行它只是为了节省磁盘空间。make install通常将文件复制到目标目录(同样取决于开发人员)-通常放置在/usr/lib或的位置/usr/bin(如果是Autotools构建系统,则也由configure脚本确定)

这些细微差别是人们使用RPM或Debian软件包之类的软件包管理系统的主要原因。


人们使用二进制软件包的主要原因?怎样节省时间呢?
— x-yuri

6

据我了解,这只是为了保护磁盘空间。编译某些程序后,您将拥有许多文件,例如不再需要的目标文件,因为它们在二进制文件中链接在一起。可以再次花费一些CPU时间来重新创建所有内容。

以当前ffmpeg代码为例:

  • 克隆git回购后,源需要53 160 kB
  • 配置运行后为53632 kB
  • 编译后,我们得到的初始值为10倍以上:673 668 kB
  • make clean 减少到53636 kB
  • 最后,make distclean在克隆后我们几乎处于水平:53 188 kB

2

为什么libvpx步骤使用make clean而不是make distclean

在编写指南时,libvpx中没有Makefile针对target的规则distclean,因此clean使用了它。

为什么make (dist)clean在之后make install

make distcleanmake clean后面的/ make install只是作为一种预防措施,为回过头来,更改配置选项并重新编译(发生的次数比预期的多)的用户提供了“干净的状态”。

在编译指南的先前版本中,如果没有预防措施make distclean,则这些用户之一有时会遇到意外结果。

如果make distclean/ make clean给出错误怎么办?

像这样:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

或这个:

make: *** No rule to make target 'distclean'.  Stop.

忽略它。这只是意味着您可能跑了make distclean两次,这是无害的。


值得注意的是,该指南现在make distclean用于libvpx。
— Hashim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.