利用GCC的预处理器分析包含指令之间的依赖关系

来源:互联网 发布:js如何清空div的内容 编辑:程序博客网 时间:2024/05/24 06:00
  使用-H参数,cpp -H -I<include-dirs>  <source-file> 2>&1 1>/dev/null | grep <project-include-dir>,
  其中-H参数可以打印#include指令的包含关系的栈,<source-file>是源文件;2>&1是将输出到标准错误的内容重定向到标准输出上,方便后面进行管道操作,而1>/dev/null是将原来输出到标准输出的内容(即预处理器对源文件处理后的结果)丢弃。经过这样的重定向处理后,输出到标准输出的就只有表示#include关系的内容了。grep语句的作用是要
将包含的语言的标准头文件或操作系统的头文件(以#include<..>形式包含的)去掉(输出的是绝对路径,而一般标准库的路径不会包含有特定项目的名称,所以可以过滤掉)。


  包含关系的栈,输出的头文件绝对路径名前面只有一个“.”的,表示是从当前“.c”中包含的,这是第一层包含的;如果第一层所包含的头文件又包含其他头文件,那么紧接着这个包含文件的下面,会以两个点“..”起一行显示该文件包含的其他的头文件的绝对路径名。以此类推,就得到一个包含指令之间的关系栈。

0 0
原创粉丝点击