查找字符串是直接还是间接存在于所有文件中

时间:2011-10-05 06:16:19

标签: linux shell unix

我有一组c文件,我需要查明特定的头文件是直接还是间接存在于所有文件中。

For ex:-
Header files:-

hf1.h:-
int i = 10;

hf2.h:-
#include "hf1.h"

hf3.h:-
#include <hf1.h>

hf4.h:-
#include <hf3.h>

c files:-
cf1.c:-
#include <hf1.h>

cf2.c:-
#include <hf2.h>

cf3.c:-
#include <hf4.h>

在这种情况下,hf4.h间接包含hf1.h文件。我需要找到hf1.h是直接还是直接包含在所有文件中。如果有人需要更多澄清,请告诉我。

任何unix命令或shell脚本都可以解决这个问题。

3 个答案:

答案 0 :(得分:3)

  1. 在hf1.h
  2. 中引入#error指令
  3. make clean
  4. make -k all
  5. 现在存在的所有目标文件都未包含hf1.h
  6. -k步骤是关键步骤:它确保编译继续经过第一个损坏的文件。

答案 1 :(得分:1)

很长一段时间是在gcc中使用-E选项(使用此参数,它实际上只为预处理提供输出,不进行编译),然后搜索所有c文件的部分,然后搜索每个头文件的部分内容在所有输出中。 如果想到任何更短的方法,将会更新。

答案 2 :(得分:0)

假设您没有像

这样的代码
#include               <hf1.h>
#include \
<hf1.h>

然后找到直接包含是一个简单的

grep -l '#include .hf1\.h'

命令。为了找到间接包含,我建议你把

#error "hf1_included"

进入hf1.h并编译所有文件(例如“make -k”或类似文件)。捕获stderr并搜索hf1_included。这将给出直接或间接包含hf1.h的文件列表。现在,您还可以通过考虑仅直接包含的第一个列表来提取仅间接包含的列表。您可以使用程序comm执行此操作。