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.