我需要为当前项目编写文档,列出所有.c文件,每个文件列出该文件直接或间接包含的每个.h文件.
这是一个大项目,虽然我们有理论上有这些信息的Makefile,但那些Makefile有时是不正确的(我们从另一家公司继承了这个项目).我们经常不得不做一个make clean ; make
实际反映在重新编译中的更改,所以我不想依赖这些Makefile.
那么是否有一个工具可以让我们给它一个.c文件和一个包含路径的名称,让它告诉我们.c文件直接或间接包含的所有.h文件?我们没有任何奇怪的东西
#define my_include "some_file.h" #include my_include
所以这个工具不需要是完美的.在常规包含的包含路径中搜索.c和.h文件的任何内容都足够好.
我在Makefile中做的是
SRCS=$(wildcard *.c) depend: $(SRCS) gcc -M $(CFLAGS) $(SRCS) >depend include depend
这意味着如果更新了任何源文件,则将运行depend规则,并使用gcc -M更新名为depend的文件.然后将其包含在makefile中,以提供所有源文件的依赖性规则.
Make会在包含文件之前检查文件是否是最新的,因此只要你运行make就必须运行这个依赖规则而不需要"make depend".
这将在任何文件更改时运行.我从来没有发现这个问题,但如果您在目录中有大量文件,您可能会发现它花了太长时间,在这种情况下,您可以尝试为每个源文件设置一个依赖项文件,如下所示:
SRCS=$(wildcard *.c) DEPS=$(SRCS:.c=.dep) %.dep : %.c gcc -M $(CFLAGS) $< >$@ include $(DEPS)
请注意,您可以使用-MM而不是-M来不包含系统标头.
"gcc -M file.c"可以满足您的需求.