c/c++语言开发共享如何收集大型Makefile项目的所有依赖项?

在一个大型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 

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

    您可以创建依赖项文件以及第一次编译运行。

    在第一次运行期间,对象尚不存在,因此无论如何都将调用编译器。 首先创建空的依赖项文件,然后在编译时更新它们。

    应该可以扩展单目录C ++项目的最小Makefile以使用子目录。

      以上就是c/c++开发分享如何收集大型Makefile项目的所有依赖项?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541900.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐