标准cscope搜索“查找文件#including this file”
仅返回foo.h直接包含在bar.c中的匹配项
但我对所有直接或间接
的文件感兴趣(例如包括包含foo.h的头文件)包括foo.h
答案 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。