我已经看到很多方法用于解决Makefile中的依赖关系,例如使用gcc -MM
和sed
commond,或使用include
指令(加上一点Perl魔法) ),或qmake
,或automake
,或info make
等
面对这么多选择,我很困惑,我应该选择哪一个。那么,我想知道现在解决Makefile中依赖关系的常用方法是什么?什么是应对这个问题的最佳方法?
PS:C / CPP项目。
答案 0 :(得分:1)
一般来说,如果您关心的是支持GNU make和gcc的系统(例如所有Linux变体和大多数类似unix的系统),您只需使用gcc的各种-M
标志来生成依赖项,然后{ {1}}在Makefile中。有一些很好的信息in this question - 通常不需要使用sed或任何更复杂的工具。
答案 1 :(得分:0)
如果您只需要支持许多Linux发行版(正如您在评论中所述),那么我建议使用automake/autoconf
套件。
这个答案假设您只是一般性地询问,而您还不知道在出发时需要解决哪些具体问题。
修改强>:
单独的GNU make可以处理你自己项目中的依赖项生成。
autoconf
处理第三方库,工具或系统功能的可选或替代依赖项。 automake
提供了macros,其中一些偶尔会有用,即使您使用autoconf
而没有automake
。
直接从automake
开始的附带好处是,您的makefile将完全可预测(在约定和可移植性方面),而且注意力较少。
因此我的谦虚建议。
答案 2 :(得分:0)
有几种方法可以为C / C ++项目生成与make兼容的依赖项:
gcc -M
,它有多种风格,在准确性方面有点“黄金标准”,因为它使用实际的编译器来生成依赖关系,谁会更好地了解如何处理{{1}语句比编译器本身?makedepend
,通常不鼓励使用编译器生成的依赖项。fastdep
,另一个第三方依赖关系生成器,声称速度比#include
快。我曾经做过performance comparison几个这样的选项。
免责声明:我是ElectricAccelerator的架构师和首席开发人员。