make clean、 make mrproper、make distclean的区别

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
内核编译时, 到底用make clean, make mrproper还是make distclean

在编译内核时, 被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别:
解压内核源码包后, 到内核源代码目录树的顶层目录, 执行
# make help
Cleaning targets:

clean          - Remove most generated files but keep the config and enough build support to build external modules

mrproper    - Remove all generated files + config + various backup files

distclean    - mrproper + remove editor backup and patch files

make help的结果:
make clean                    删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make mrproper             删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
make distclean              mrproper删除的文件, 加上编辑备份文件和一些补丁文件。

看帮助可以发现删除的文件范围从小到大依次为: make clean < make mrproper < make distclean, 查看源码目录树的顶层目录下的Makefile求证, 可以发现:
clean: archclean $(clean-dirs)
$(call cmd,rmdirs)
$(call cmd,rmfiles)
@find . $(RCS_FIND_IGNORE) \
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.symtypes' -o -name 'modules.order' \
-o -name 'Module.markers' \) \
-type f -print | xargs rm -f

mrproper: clean archmrproper $(mrproper-dirs)
$(call cmd,rmdirs)
$(call cmd,rmfiles)

distclean: mrproper
@find $(srctree) $(RCS_FIND_IGNORE) \
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-o -name '.*.rej' -o -size 0 \
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
-type f -print | xargs rm -f
也就是说, 执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。

其实, 对于一个刚刚从kernel.org上下载的内核源码包, 可以不用执行make clean/make mrproper/make distclean, 因为源码包的状态本身就是clean的。

另外, 就算编译过内核之后, 需不需要clean一下,  个人觉得应该具体问题具体对待, 且看linuxsir上也有兄弟对这个问题有疑问:
Q: 很多内核编译的教程都说在make之前要先make mrproper,清除以前编译的产物。但编译器/链接器本身就会检查文件的日期,并确定是否需要重新编译/链接。如果清除了,很多以前已经编译过的代码 又得重新编译。如果说这样能节省硬盘空间的话,那只有那些先前编译过而现在不再需要的模块的空间被节省了,而代价则是编译时间延长了。个人觉得得不偿失, 至少不需要每次编译都来一次make mrproper。
 
A:  我没有make mrproper,每次修改内核配置后很快就能编译完成,很方便,也没发现什么问题
如果make不能确定那些文件要重新编译,那还要make做什 么
个人观点,尽信书则不如无书,实践出真知,呵呵
 
A:  不执行make mrproper是否出错,取决于Makefile的智能化程度。如果Makefile没能完成你所要求的全部改动,很可能编译出来的内核不如你所愿,甚 至可能导致panic。建议重新编译的时候注意看看改动是否都落实了。


make cleanmake distclean区别 make clean仅仅是清除之前编译的可执行文件及配置文件。 而make distclean要清除所有生成的文件。 Makefile 在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作: make 根据Makefile编译源代码, 阅读详情

相关推荐

linux系统命令makecleandistclean的用法讲解

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make.可见,makefile都成为了一种在工程方面的编译方法。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。...

打不倒的程序猿 3164

make的执行步骤以及常见的make命令,make distclean 以及和make clean区别

make命令的执行步骤

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 5305

Linux命令之make cleanmake distclean的差异

寞水

寞水 2408

make cleanmake mrpropermake distclean区别【转】

本文转载自:http://blog.csdn.net/liyayao/article/details/6818061 内核编译时, 到底用make clean, make mrproper还是make distclean 在编译内核时, 被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别:解压内核源码包后, 到内核源代码...

zzb2760715357的博客 170

make cleanmake mrpropermake distclean区别 .

内核编译时, 到底用make clean, make mrproper还是make distclean 在编译内核时, 被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别: 解压内核源码包后, 到内核源代码目录树的顶层目录, 执行 # make help Cleaning targets: clean 

boyemachao的专栏 1602

make mrproper,make distclean,make clean区别

1.先找到描述这三个命令的相关信息   在内核目录下使用make help命令可以获取相关信息,信息如下:     Cleaning targets:       clean - Remove most generated files but keep the config and           enough build support to build external modules       mrproper - Remove all generated files + config ..

weixin_42203498的博客 1377

linux内核编译时用make clean ,make mrproper 还是make distclean

解压内核源码包后,到内核源代码目录树的顶层目录,执行 # make help Cleaning targets:   clean           -Remove most generated files but keep the config and                    enough build support to build external modules

ITCWD的专栏 4672

linux内核配置清理make clean

内核编译时, 到底用make clean, make mrproper还是make distclean 在编译内核时, 被make clean, make mrproer 和 make distclean搞的纠结, 稍微总结一下这三者之间的区别: 解压内核源码包后, 到内核源代码目录树的顶层目录, 执行 # make help Cleaning targets: clean - Remove most generated files but keep the config a...

gp18391818575的博客 4666
上一篇: linux C 遍历目录及其子目录 opendir -> readdir -> closedir
下一篇: 嵌入式系统Linux内核开发工程师必须掌握的三十道题
angle_birds
博客等级 码龄15年 161粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值