我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
:
- 克隆
git
repo 后,源代码占用 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
两次,但无伤大雅。