4

我已经看到很多方法被用来解决 Makefile 中的依赖关系,例如 usinggcc -MMsedcommond,或者使用include指令(加上一点 Perl 魔法),or qmake, or automake, orinfo make等​​。

面对如此多的选择,我很困惑我应该选择哪一个。那么,我想知道现在解决 Makefile 中依赖项的常用方法是什么?解决这个问题的最佳方法是什么?

PS:C/CPP项目。

4

3 回答 3

1

通常,如果您只关心支持 GNU make 和 gcc 的系统(例如所有 linux 变体和当今大多数类似 unix 的系统),您只需使用 gcc 的各种-M标志来生成依赖项,然后-include在 Makefile 中生成依赖项。这个问题有一些很好的信息——通常不需要使用 sed 或任何更复杂的工具。

于 2012-06-01T16:57:59.753 回答
0

如果您只需要支持许多 Linux 发行版(正如您在评论中指出的那样),那么我会推荐该automake/autoconf套件。

该答案假设您只是一般性地询问,并且您还不知道在进行过程中必须解决哪些具体问题。

编辑

GNU make 可以单独处理您自己项目中的依赖项生成。

autoconf处理对第三方库、工具或系统功能的可选或替代依赖项。 automake提供了一些,即使您在autoconf没有automake.

从完全开始的一个附带好处automake是,您的 makefile 的行为将完全可预测(在约定和可移植性方面),而且投入较少。

因此,我的谦虚建议。

于 2012-06-01T16:30:49.017 回答
0

有几种方法可以为 C/C++ 项目生成兼容的依赖项:

  • gcc -M,它有多种风格,在准确性方面有点“黄金标准”,因为它使用实际的编译器来生成依赖关系,还有谁会#include比编译器本身更了解如何处理语句?
  • makedepend,通常不鼓励使用编译器生成的依赖项。
  • fastdep,另一个第三方依赖生成器,声称比gcc -M.
  • ElectricAccelerator有一个名为autodep的内置功能,它使用构建中调​​用的命令的文件系统使用活动来生成依赖关系信息。autodep 相对于其他替代方案的优势在于它非常快速且完全独立于工具和编程语言——而其他都与 C/C++ 相关联或需要使用特定的编译器,autodep 可与所有类型的构建工具一起使用。

不久前,我对其中几个选项进行了性能比较。

免责声明:我是 ElectricAccelerator 的架构师和首席开发人员。

于 2012-06-05T17:58:06.127 回答