gpt4 book ai didi

c - 自动发现 C 依赖项

转载 作者:太空狗 更新时间:2023-10-29 16:42:54 27 4
gpt4 key购买 nike

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

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

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

#define my_include "some_file.h"
#include my_include

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

最佳答案

我在 Makefile 中所做的是

SRCS=$(wildcard *.c)

depend: $(SRCS)
gcc -M $(CFLAGS) $(SRCS) >depend

include 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 来不包含系统 header 。

关于c - 自动发现 C 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/204823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com