编译内核之后相应的文件会产生一个 .*.o.cmd的依赖文件, 根据此文件可以看出被编译的.o文件依赖哪些头文件,以及被编译的参数.
.o.cmd文件的格式为:
cmd_dir/output.o := commands
dep_dir/output.o := depended_files
总的来说由两部份组成, 一个是编译命令, 另一个是依赖文件. 所以此法分析分成两结: CMD_SECTION(命令) 和 DEP_SETION(依赖), 进入的条件分别是 cmd_... 和 dep_...
我们要提取出依赖的头文件, 所以CMD_SETION不做任何处理.
DEP_SETION 中分别由 $(wildcard include-file), include-file两部分组成, 而且都有续行符号"\".
这里遇到 include-file 后判断是否是.h文件以及不带解决路径的头文件, 如果是的话打印文件名到标准输出即可. (带绝对路径的是标准库头文件, 这里不需要).
编译命令: flex scan.l; gcc lex.yy.c
============================scan.l==============================================
%{
#include <