当前位置:  开发笔记 > 编程语言 > 正文

自动发现C依赖项

如何解决《自动发现C依赖项》经验,为你挑选了2个好方法。

我需要为当前项目编写文档,列出所有.c文件,每个文件列出该文件直接或间接包含的每个.h文件.

这是一个大项目,虽然我们有理论上有这些信息的Makefile,但那些Makefile有时是不正确的(我们从另一家公司继承了这个项目).我们经常不得不做一个make clean ; make实际反映在重新编译中的更改,所以我不想依赖这些Makefile.

那么是否有一个工具可以让我们给它一个.c文件和一个包含路径的名称,让它告诉我们.c文件直接或间接包含的所有.h文件?我们没有任何奇怪的东西

#define my_include "some_file.h"
#include my_include

所以这个工具不需要是完美的.在常规包含的包含路径中搜索.c和.h文件的任何内容都足够好.



1> Mark Baker..:

我在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来不包含系统标头.


哦,并且对于性能请注意,如果任何文件更改,这将重新处理所有文件.因此,您可能希望拥有多个依赖文件(每个源文件甚至可能有一个).最后,请注意,您通常可以使用-MM来跳过对系统头的依赖,因为您不会更改它们.

2> 小智..:

"gcc -M file.c"可以满足您的需求.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有