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

转载 2012年03月24日 20:59:10

解压内核源码包后,到内核源代码目录树的顶层目录,执行
# make help
Cleaning targets:
  clean           -Remove most generated files but keep the config and
                   enough build support to build external modules
  mrproper        - Remove allgenerated files + config + various backup files
  distclean       - mrproper + remove editorbackup and patch files
看帮助可以发现删除的文件范围从小到大依次为: 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, 执行makedistclean之前,会先执行make mrproper。
再回到make help的结果:
make clean      删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
make mrproper   删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
make distclean  mrproper删除的文件, 加上编辑备份文件和一些补丁文件。
 
其实, 对于一个刚刚从kernel.org上下载的内核源码包, 可以不用执行makeclean/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 强制编译

make 如果原文件没有变化,是不会执行的。 这个时候需要 make clean 后再执行 make。 如果不论如何都要强制 make 编译,可以用如下命令: make -B

Android源代码编译命令m/mm/mmm/make分析

在前文中,我们分析了Android编译环境的初始化过程。Android编译环境初始化完成后,我们就可以用m/mm/mmm/make命令编译源代码了。当然,这要求每一个模块都有一个Android.mk文...

linux系统命令make、clean、distclean的用法讲解

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作...

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

转自:http://dongyulong.blog.51cto.com/1451604/449470 内核编译时, 到底用make clean, make mrproper还是m...

内核编译时, 到底用make clean, make mrproper还是make distclea

http://www.cublog.cn/u2/86696/showart_2254009.html在编译内核时,  被make clean, make mrproer 和 make distclea...

make clean、 make mrproper、make distclean

make mrproper及mrproper的含义            Linux下面去编译项目之前,一般常会用make mrproper去先删除之前编译所生成的文件和配置文件,备份文件等,其中,...

make clean, make mrproper, make distclean 理解

by:c1    内核编译时,会接触到make clean, make mrproper和make distclean的相关操作。 到底使用那一个操作。稍微总结一下这三者之间的区...

tcc88xx/android配置linux内核(make tcc88xx_defconfig)时gcc:error trying to exec 'cc1':execvp:No such file or directory

网上搜了好多,有的说版本不一样、有的说权限不够,要chmod、试了下不行搜到一个帖子说路径不对,PATH过去就行了, 这个行了在出现错误的时候 文件/etc/bash.bashrc下export JA...

ubuntu 内核编译工具 make-kpkg简介

本文介绍的make-kpkg可以用于所有Debian系的发行版如Debian、Ubuntu、Linux Mint等。 它可以自动生成内核镜像,带有debuginfo的调试模块,内核头文件的deb安装文...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)