如何列出包含头文件的所有文件

时间:2011-05-10 17:00:44

标签: c header-files

标准csc​​ope搜索“查找文件#including this file”

仅返回foo.h直接包含在bar.c中的匹配项

但我对所有直接或间接

的文件感兴趣

(例如包括包含foo.h的头文件)包括foo.h

2 个答案:

答案 0 :(得分:4)

如果您正在使用GCC,请在所有模块上运行cpp -H,并在grep上运行您想要的标题:

header=foo.h

# *.c or all interesting modules
for i in *.c; do
    # there's bound to be a cleaner regex for this
    cpp -H "$i" 2>&1 >/dev/null | grep -q "^\.* .*/$header" && echo "$i"
done

答案 1 :(得分:0)

这篇SO帖子可能会帮助你:

make include directive and dependency generation with -MM

基本上,make可以生成项目中所有依赖项的列表。我在所有make文件中使用以下内容:

# Generate dependencies for all files in project
%.d: $(program_SRCS)
    @ $(CC) $(CPPFLAGS) -MM $*.c | sed -e 's@^\(.*\)\.o:@\1.d \1.o:@' > $@

clean_list += ${program_SRCS:.c=.d}

# At the end of the makefile
# Include the list of dependancies generated for each object file
# unless make was called with target clean
ifneq "$(MAKECMDGOALS)" "clean"
-include ${program_SRCS:.c=.d}
endif

这样做的一个例子。让我们说你有foo.cpp,包括foo.h,其中包括bar.h,其中包括baz.h.以上将生成文件foo.d并将其包含在您的make文件中。依赖文件foo.d看起来像这样:

foo.d foo.o: foo.cpp foo.h bar.h baz.h

这样两种方式都可以,您可以看到任何特定目标文件的完整构建依赖链。

然后找到包含特定标题grep -l foo.h *.d的所有文件,找出哪些源文件包含foo.h。