我见过很多的方法被用来解决在Makefile中的依赖关系,如使用gcc -MM
和sed
commond,或使用include
指令(再加上一点点的Perl魔术),或qmake
,或者automake
,或info make
等。解决Makefile中的依赖问题的常用方法是什么?
面对如此多的选择,我很困惑应该选择哪一个。所以,我想知道现在如何解决Makefile中的依赖问题?处理这个问题的最好方法是什么?
PS:C/CPP项目。
我见过很多的方法被用来解决在Makefile中的依赖关系,如使用gcc -MM
和sed
commond,或使用include
指令(再加上一点点的Perl魔术),或qmake
,或者automake
,或info make
等。解决Makefile中的依赖问题的常用方法是什么?
面对如此多的选择,我很困惑应该选择哪一个。所以,我想知道现在如何解决Makefile中的依赖问题?处理这个问题的最好方法是什么?
PS:C/CPP项目。
一般来说,如果你关心的是支持GNU使和gcc(如所有的Linux版本和大多数UNIX类系统,这些天),你只需要使用gcc的各种-M
标志产生依赖系统,然后-include
他们在您的Makefile文件。有一些很好的信息in this question - 通常不需要使用sed或更复杂的工具。
感谢您的提示:-) – injoy
如果你只需要支持大量的Linux发行版(正如你在评论中提到的那样),那么我会推荐automake/autoconf
套件。
这个答案假设你只是普遍问,而你还不知道在你走的时候你需要解决哪些具体问题。
编辑:
GNU使单独可以在自己的项目中处理依存产生。
autoconf
处理对第三方库,工具或系统功能的可选或替代依赖关系。 automake
提供了macros,其中一些偶尔有用,即使您以其他方式使用autoconf
而没有automake
。
直接从automake
开始的一个好处是,您的makefile文件的行为完全可预测(在约定和便携性方面),投资少。
因此,我谦卑的建议。
automake/autoconf实际上只在需要支持非Linux系统时才需要。如果你关心的只是Linux,只需使用GNUmake –
非常感谢! – injoy
@ChrisDodd - +1给你的答案。现在我扩大了我的答案,您已经帮助我更好地理解这个问题的重点。我怀疑我的观点可能是基于某种过时的个人经历,但我会让社区判断。 –
有几种方法来生成化妆兼容依赖于C/C++项目:
gcc -M
,其中有几种类型,是一种“黄金标准”,在精度方面,因为它使用实际编译器生成依赖关系,以及谁会比编译器本身更好地了解如何处理#include
语句?makedepend
,通常不赞成编译器生成的依赖关系。fastdep
,另一个声称比gcc -M
更快的第三方依赖关系生成器。我做了performance comparison几个这些选项,而回来。
声明:我是ElectricAccelerator的架构师和首席开发人员。
这取决于情况,你可能会解释一下你的makefile问题,这样我们可以更好地帮助你吗? – pyCthon
它也可能取决于你需要支持哪些平台(你需要如何移植)。 –
@pyCthon其实,问题很简单,依赖问题。如对头文件进行修改,重新运行'make'命令只会重新生成相应的目标文件。我想知道的是解决这个问题的“最佳”或“常用”方法。谢谢。 – injoy