我已经看到很多方法被用来解决 Makefile 中的依赖关系,例如 usinggcc -MM
和sed
commond,或者使用include
指令(加上一点 Perl 魔法),or qmake
, or automake
, orinfo make
等。
面对如此多的选择,我很困惑我应该选择哪一个。那么,我想知道现在解决 Makefile 中依赖项的常用方法是什么?解决这个问题的最佳方法是什么?
PS:C/CPP项目。
通常,如果您只关心支持 GNU make 和 gcc 的系统(例如所有 linux 变体和当今大多数类似 unix 的系统),您只需使用 gcc 的各种-M
标志来生成依赖项,然后-include
在 Makefile 中生成依赖项。这个问题有一些很好的信息——通常不需要使用 sed 或任何更复杂的工具。
如果您只需要支持许多 Linux 发行版(正如您在评论中指出的那样),那么我会推荐该automake/autoconf
套件。
该答案假设您只是一般性地询问,并且您还不知道在进行过程中必须解决哪些具体问题。
编辑:
GNU make 可以单独处理您自己项目中的依赖项生成。
autoconf
处理对第三方库、工具或系统功能的可选或替代依赖项。 automake
提供了一些宏,即使您在autoconf
没有automake
.
从完全开始的一个附带好处automake
是,您的 makefile 的行为将完全可预测(在约定和可移植性方面),而且投入较少。
因此,我的谦虚建议。
有几种方法可以为 C/C++ 项目生成兼容的依赖项:
gcc -M
,它有多种风格,在准确性方面有点“黄金标准”,因为它使用实际的编译器来生成依赖关系,还有谁会#include
比编译器本身更了解如何处理语句?makedepend
,通常不鼓励使用编译器生成的依赖项。fastdep
,另一个第三方依赖生成器,声称比gcc -M
.不久前,我对其中几个选项进行了性能比较。
免责声明:我是 ElectricAccelerator 的架构师和首席开发人员。