编译脚本的主要实现功能
使用make参数可以方便的追踪makefile的执行过程
内部$(MAKE)调用和其他脚本不会继承make参数,需要手动添加参数
以下为make调试参数
-n #不执行实际的命令 --trace #追踪命令的执行过程 --debug #追踪构建目标 -d #文件调用过程 -p #展开构建规则 V=cs #更详细的执行步骤
从文件结构视角来分析Makefile文件的执行过程,可以清晰的展示出所调用的文件,建立初步的构建框架。
同一个mk文件可能被多个mk文件引入,非必要仅在第一次引入时写出
默认情况下先执行make menuconfig
配置需要编译的内容,再使用make
进行编译。也可通过make package/kernel/linux [target]
的形式指定编译目标,该情况会在后续分析过程中说明。
make menuconfig
./Makefile #入口,引入各级文件,指定源码顶层构造的依赖 ├──./include/debug.mk #非重点,引入打印调试信息的方法 ├──./include/depends.mk #非重点,引入检查软件包中文件变动的方法(MD5,时间戳),在编译host,package,config,kernel时使用,并在文件夹下生成*.dep_*类型的文件(可选)记录hash ├──./include/toplevel.mk #负责与配置相关的依赖 │ ├──include/version.mk #非重点,引入SDK版本信息 │ ├──include/prereq-build.mk #非重点,编译了一个hash工具 │ ├──include/scan.mk #构建menuconfig菜单项信息 │ │ ├──tmp/info/.files-packageinfo.mk #构建软件包菜单项信息,由PackageDir实现并输出 │ │ └──tmp/info/.files-targetinfo.mk #构建架构菜单项信息,由PackageDir实现 │ ├──.config #生成的配置文件 │ └──scripts/config/mconf #调用该工具,提供可视化的配置界面 │ └──Config.in #包含软件包的依赖关系 └──./include/verbose.mk #非重点,V=cs的实现