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

云服务器_阿里云消息队列_企业0元试用

小七 141 0

数据库工具_哪里买_物联网信息技术

就像任何经过多年发展的系统一样,gnumake充斥着一些有问题的实用程序的附件。其中一个特别值得注意的地方是gmake中内置规则的集合。这些规则使得我们可以在不需要makefile的情况下将C源文件编译为可执行文件,或者使用makefile编译和链接多个源文件,makefile只是命名可执行文件和进入其中的每个对象是的。但是这种便利是要付出代价的。尽管一些内置规则在现代环境中仍然相关,但许多规则已经过时,或者充其量是不常用的。上一次编译Pascal代码,或者使用SCCS或RCS作为版本控制系统是什么时候?然而,每次运行构建时,gmake都必须对照这些规则检查每个源文件,以防其中一条可能适用。对gnumake命令行进行一个简单的调整就可以使makefile的性能提高30倍。不相信我?阅读来吧,让我来我们看看一件小事示例:全部:输入@回音完毕触摸文件输入,然后使用-d选项运行gmake,什么叫物联网,这样你就可以看到gmake在尝试每个内置规则。你会看到,GMake会漫无目的地讲上百行。这是一个例子输出:考虑目标文件"all"。文件"all"不存在。正在考虑目标文件"input"。正在寻找"input"的隐式规则。... 许多行省略了。。。正在尝试使用词干"input"的模式规则。正在尝试隐式先决条件"RCS/input,v"。正在尝试使用词干"input"的模式规则。正在尝试隐式先决条件"RCS/input"。正在尝试使用词干"input"的模式规则。正在尝试隐式先决条件"s.input"。正在尝试使用词干"input"的模式规则。正在尝试隐式先决条件"SCCS/s.input"。正在尝试使用词干"input"的模式规则。... 又漏掉了几百行。。。找不到"input"的隐式规则。已完成目标文件"input"的先决条件。这是怎么回事?如果gmake没有生成规则的话,我们可以看看它是如何生成规则的。当然他们都没有,所以这都是白费力气。幸运的是,你只需要一个命令行选项就可以告诉gmake不要为默认的内置规则而烦恼:-r。再次尝试这个简单的makefile,这次使用-d-r:考虑目标文件'all'。文件"all"不存在。正在考虑目标文件"input"。正在寻找"input"的隐式规则。找不到"input"的隐式规则。已完成目标文件"input"的先决条件。所有多余的废话都不见了!即使在这个玩具的例子中,性能也有明显的提高:最初,这个makefile运行时间大约为0.015s(平均运行三次);禁用内置规则后,它仅为0.012s。但我可以看到,这样一个小例子不会让您信服。所以让我们试试看更大的来源:=$(通配符sub/*.x)目标:=$(来源:.x=.o)全部:$(目标)@回音完毕.o:.x@回声$@directory sub包含15000个名为00001.x到15000.x的文件。使用内置规则(并将输出重定向到/dev/null),这个makefile在大约60.2s内运行;如果没有内置规则,则运行速度更快42.9s-28。最后,让我们在一个实际的构建上尝试这种优化。我完全构建了Accelerator项目的一个组件,然后运行"无操作"构建(也就是说,没有工作要做,大数据精准,软件企业优惠,只是检查所有东西都是最新的)。有了内置规则,返利app可信吗,这需要6.0秒;没有,就快5.2秒-13秒:测试结果(越短越好)大型测试,有内置-ins:60.2大型试验,无内置;42.9sNo-op内置,有内置-ins:6.0sNo-op版本,未建成-ins:5.2秒,如果您的构建实际上依赖于内置规则,显然您不能简单地禁用它们。但是可以显式地定义您需要的那些规则,top返利,并禁用其余的规则。例如,如果使用默认的.o:.cpp规则,则可以将该规则添加到生成文件:.o:.cpp$(编译.cpp)$(输出选项)$