zoukankan      html  css  js  c++  java
  • 【转】内核编译时, 到底用make clean, make mrproper还是make distclean(转载)

    原文网址:http://dongyulong.blog.51cto.com/1451604/449470

    内核编译时, 到底用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 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。
    再回到make help的结果:
    make clean      删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
    make mrproper   删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
    make distclean  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。建议重新编译的时候注意看看改动是否都落实了。

  • 相关阅读:
    OpenCV on Mac OSX: A step-by-step guide
    opencv打开摄像头获取视频程序
    使用find_if算法搜寻map的value
    c++如何理解map对象的value_type是pair类型
    关联容器执行器指定排序规则
    仿函数和函数配接器
    C++的异常处理
    back_insert_iterator和insert_iterator
    copy函数与ostream_iterator、reverse_iterator
    const_cast
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4563323.html
Copyright © 2011-2022 走看看