云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

亚马逊云_怎么申请阿里企业邮箱_免费1年

小七 141 0

make的一个众所周知的问题是,完全指定项目中的所有依赖项是非常麻烦的。例如,如果您的项目中有一个main.c文件,那么您的makefile:main.o: 梅因.乔弗,如果main.c包含logging.h,则从技术上讲,您也需要有一个类似于以下内容的依赖项--但您可能没有:main.o:日志记录.hThe关键是没有这种额外的依赖性,如果logging.h发生变化,make将无法意识到它需要重建main.o。当然,这会严重破坏您执行可靠增量的能力builds.makeDependent编译器生成的依赖项这个问题的经典解决方案是使用自动生成依赖项的机制之一,例如makedepend,或者编译器生成的依赖项,如果您的编译器支持它(例如,通过-MM开关)。例如,可以通过在makefile:SRCS=main.c依赖:@makedepend-f-s$(SRCS)#不要删除这一行--使依赖于它。然后,您可以调用makedepend来生成依赖项;makedepend将把它们附加到makefile的末尾,在上面显示的神奇的"不要删除"行之后。这当然能完成任务,但也有一些缺点。欧文在格里莫尔有一个更彻底的缺点,但基本上问题是:是吗是一个手动过程;如果您忘记定期运行makedepend,则依赖项将陈腐的。它很笨拙,因为它依赖于中的魔法令牌并修改生成文件。它增加复杂性生成文件。它的慢点。有点这些缺陷可以通过更复杂的集成来解决。我的好朋友Make先生有一篇很好的文章,探讨了这个选项,以及编译器生成的依赖关系,但是请记住,这样做会给您的makefiles.ElectricAccleratorautodepend如果您使用CloudBees加速器,您还有另一个选择:autodepend。此功能与makedepend等的作用相同,因为它自动为您生成依赖关系信息,因此您不必自己管理这些数据。最大的区别是,当然,在任何可能的情况下都会更好路:它真正自动的:将--emakeautodep=1添加到命令行中,不要担心它又一次。它的透明:附加的依赖项在单独的文件中跟踪,所以你不必修改makefile。你不必在上更改makefile或工具命令行全部。它完全是工具链,平台与语言独立。最好最重要的是:它很快。Autodepend使用我们在构建过程中收集的文件系统使用信息,为构建生成的每个文件获取完美的依赖关系信息。如果生成main.o的命令读取logging.h,我们将看到它并记录隐式依赖关系,就像将main.o:logging.h添加到makefile一样。因为我们已经在收集数据了,autodepend几乎没有增加任何开销,但是你不必相信我的话。我建立了一个测试环境,让我可以轻松地在makedepend、g++-MM依赖项和autodepend之间切换,然后使用每种机制运行一个小构建三次。构建包括大约75个C++源文件,引用了大约150个头文件。此处显示的时间(在分:秒格式)反映生成依赖项和运行生成的总时间本身:机械试验1试验2试用版3AverageNone3:233:273:203:23makedepend4:404:374:334:36g++-MM4:073:573:594:01g++-MD3:533:533:403:48emake autodep3:183:223:293:23我认为结果非常有说服力:使用autodepend在构建时间上有可观的开销,而备选方案将总构建时间增加了20-30。如果这还不足以说服您尝试一下,也许可以这样做:就在上周,我们的一个客户从编译器生成的依赖项切换到了autodepend,并看到他们的构建时间从32分钟下降到了18分钟。所以试试看:你没有什么可失去的——当然,除了长的构建。更新(2008年12月19日):为g++-MD添加了基准数据,这是编译器生成的依赖项的一个变体,它在执行编译的同时发出依赖文件,而不是作为一个单独的步骤,提高了效率技术。建造加速和连续交付如果构建和测试花费太长的时间来完成,持续交付就不是连续的。进一步了解CloudBees Accelerator如何将构建和测试速度提高20倍,从而提高软件上市时间、基础设施利用率和开发人员生产率。