`make clean` 和 `make distclean` 之间有什么区别?

`make clean` 和 `make distclean` 之间有什么区别?

ffmpeg在以下帮助下从源代码安装这一页

我注意到本教程的大部分内容都make distclean在之后调用make install。但仅在安装后libvpx调用。make clean

根据这个文件

make clean删除所有make创建的文件,并make distclean删除所有./configure创建的文件。

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

make distclean
另外删除 ./configure 创建的所有内容。

我理解这make distclean是为了下一次安装而调用的,但我不明白为什么make clean在安装后会调用它。

安装ffmpeg没有问题。所以我问这个问题是因为我只想提高我对 Linux 的了解。如果有人能给我解释一下,那将非常有帮助。

答案1

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

典型的标准是make clean删除所有中间文件,并使make distclean树保持解压时的状态(或非常接近的状态),包括删除任何配置脚本输出。例如,这是 Linux 内核的工作方式。

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

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

答案2

据我所知,这只是为了节省磁盘空间。编译一些程序后,您将获得许多文件,例如不再需要的目标文件,因为它们在二进制文件中链接在一起。所有这些都可以通过再次花费一些 CPU 时间重新创建。

以当前代码为例ffmpeg

  • 克隆gitrepo 后,源代码占用 53 160 kB
  • 配置运行后,大小为 53 632 kB
  • 编译后,我们得到了初始值的 10 倍多:673 668 kB
  • make clean将其减少到 53 636 kB
  • 最后make distclean我们几乎达到了克隆后的级别:53 188 kB

答案3

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

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

为什么make (dist)clean包括之后make install

make distclean/make 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两次,但无伤大雅。

相关内容