五 其它目标和通用选项的介绍

    由于第四章和第五章的内容比较少,故这里将它们放到一起发布了。本篇内容主要包括kernel makefile支持的一些其它目标和通用选项的简单介绍。

四 其它目标的执行过程
    kernel makefile除了支持编译vmlinux,modules之外,还支持多种其它目标的编译。由于它们相对比较简单,故这里只列举一些它们的用法,而不再对其实现一一分析。
    我们可以根据make help中简要看下其支持的目标:
(1)all
     它包含了vmlinux和modules两部分
(2)modules_install
     它会将编译好的modules安装到指定目录,对于交叉编译,这个没什么用处
(3)firmware_install
     通上面一样,它会将firmware安装到指定的目录
(4)dir/
     它支持编译某个目录下的所有目标
(5)dir/file.[ois]
     它支持编译某个目标下的某个文件,且可以只进行预处理生成.i文件,或预处理并编译生成.s文件,或者预处理,编译并汇编生成.o文件
(6)dir/file.lst
     这个除了编译出.o文件,还执行了一个脚本scripts/makelst脚本,用来做什么的我也不懂
(7)dir/file.ko
     它用于编译某个目录下的ko文件
接下来我们再看一类特殊的清理目标,在kernel makefile有三种clean的方式,它们的命令分别为:
(1)make clean
(2)make mrproper
(3)make distclean
    make clean的定义如图4.1,它的主要工作是清除大部分编译过程中产生的文件,但会保留config文件,因此,即使运行了make clean,在该环境下编译外部模块也是没问题的。
在这里插入图片描述
                                          图4.1
    make proper的定义如图4.2,可以看出它依赖于clean,并且还会依赖archmrproper和mrproper-dirs。其中archmrproper是arch相关的,若某些arch需要装载mrproper时做一些arch目录下相关的清理工作,则会定义该规则。mrproper-dirs的定义如图4.2,其中MRPROPER_DIRS和MRPROPER_FILES的定义如图4.3。即它还会删除配置相关的文件,一些编译过程中产生的头文件,版本文件,security相关的文件等。
在这里插入图片描述
                                          图4.2
在这里插入图片描述
                                          图4.3
    distclean目标的定义如图4.4,它依赖于mrproper,此外还删除了orig文件,reg文件,bak文件等。因此make distclean是清理的最彻底的,而make clean其实保留了配置文件,在该基础上重新编译某个目标,不需要运行make xxxconfig重新进行配置。
在这里插入图片描述
                                          图4.4

五 通用命令行选项用法
    通用命令行选项主要提供了一些扩展功能,让我们的编译更加具有灵活性,有些选项对于我们平常的代码维护或者定位问题都会很有帮助,因此这里对它们的一些用法做一简要介绍。
    选项V的定义如图5.1,默认情况下该值为0,此时变量Q定义为@,因此makefile不会打印出其执行的命令语句。当命令行带有参数V=1时,Q的定义会被修改成空,因此makefile的编译命令也会输出到屏幕上。当我们debug出现编译问题,需要debug的时候,该选项会很管用。
在这里插入图片描述
                                          图5.1
    选项O的定义如图5.2,它定义了目标文件的输出目录,具体的执行过程如图5.3,即它会重新调用makefile,并进入选项O定义的目录下编译。它的主要作用是不会污染源文件,编译的中间文件和目标文件都存放在指定的目录下,从而保证源文件的干净。
在这里插入图片描述
                                          图5.2
在这里插入图片描述
                                          图5.3
    选项C的定义如图5.4,它的主要作用是对代码进行静态检查。如图中注释,默认时该参数被设置为0,即不进行检查。当C设置为1时,会对需要重新编译的代码做检查。若C设置为2时,则会对所有的代码做静态检查,不论其是否需要被重新编译。代码的静态检查可以在该过程中提前发现一些代码的逻辑问题等,使其不需要等到运行时才暴露出来,能起到提早发现和提早修复问题的作用。
在这里插入图片描述
                                          图5.4

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值