加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何收集大型Makefile项目的所有依赖项?

发布时间:2020-12-16 07:08:49 所属栏目:百科 来源:网络整理
导读:在一个大型C项目中,我有一个顶级Makefile和许多子Makefile在不同的子目录中.我需要收集编译的所有依赖项.为此,我将-MMD添加到CFLAGS并获取一堆.d依赖文件. 这些.d文件分散在子目录中.此外,依赖关系有时被写为绝对路径,有时作为与编译目录相关的路径,有时包含
在一个大型C项目中,我有一个顶级Makefile和许多子Makefile在不同的子目录中.我需要收集编译的所有依赖项.为此,我将-MMD添加到CFLAGS并获取一堆.d依赖文件.

这些.d文件分散在子目录中.此外,依赖关系有时被写为绝对路径,有时作为与编译目录相关的路径,有时包含符号链接.我编写了一个脚本,它可以找到所有.d文件,遍历它们的目录,并解析所有找到的路径.这有效,但有数万个依赖项文件,这个依赖项集合与编译大致相同! (等待太长了:))

有没有更快的方法来获取单个文件中的所有依赖项?如果这很重要,那就是ANSI C,GCC和Linux.提前致谢.

解决方法

您可以使用 -MM而不是-MMD,它将依赖项发送到标准输出.

然后,您可以将所有输出收集到顶级目录中的某个依赖项文件中

gcc -MM ... file.c >>$(top)/all.d

如果后期处理是在一个文件中收集输出的唯一原因,则可以使用管道过滤输出

gcc -MM ... file.c | sh filter.sh >file.d

并将依赖项文件分开.

如果某些本地包含文件(defs.h)或主源的路径很重要,则可以通过提供适当的-I选项强制gcc包含路径,例如:

gcc -MM -I$(top)/path/to ... $(top)/path/to/file.c >>$(top)/all.d

要么

gcc -MM -I$(top)/path/to ... $(top)/path/to/file.c | sh filter.sh >file.d

代替

file.o: file.c defs.h

gcc会发出

file.o: /absolute/path/to/file.c /absolute/path/to/defs.h

当然,这也适用于相对路径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读