您使用了哪些策略来改进大型项目的构建时间? 我曾经在一个C++项目上工作过一个半小时,以便进行完全的重建。小的编辑、构建和测试周期大约需要5到10分钟。这是一场徒劳的噩梦
您必须处理的最糟糕的构建时间是什么 您使用了哪些策略来改进大型项目的构建时间 更新: 你认为使用的语言在多大程度上是造成这个问题的原因?我认为C++容易对大型项目产生巨大依赖性,这通常意味着即使对源代码进行简单的更改也会导致大规模的重建。您认为哪种语言最适合处理大型项目依赖性问题您使用了哪些策略来改进大型项目的构建时间? 我曾经在一个C++项目上工作过一个半小时,以便进行完全的重建。小的编辑、构建和测试周期大约需要5到10分钟。这是一场徒劳的噩梦,c++,compiler-construction,build-process,build-automation,C++,Compiler Construction,Build Process,Build Automation,您必须处理的最糟糕的构建时间是什么 您使用了哪些策略来改进大型项目的构建时间 更新: 你认为使用的语言在多大程度上是造成这个问题的原因?我认为C++容易对大型项目产生巨大依赖性,这通常意味着即使对源代码进行简单的更改也会导致大规模的重建。您认为哪种语言最适合处理大型项目依赖性问题 远期申报 pimpl习语 预编译头 并行编译(例如,Visual Studio的MPCL外接程序) 分布式编译(例如,Visual Studio的增量编译) 增量构建 在几个“项目”中拆分构建,因此如果不需要,就不要编
8.购买速度更快的机器。我的策略很简单——我不做大型项目。现代计算的全部主攻方向是从庞大的、单一的,转向小型的、组件化的。因此,当我在项目中工作时,我会将东西分解成库和其他组件,这些组件可以独立构建和测试,并且相互之间的依赖性最小。这种环境中的“完整构建”实际上从未发生过,因此没有问题
强大的编译机器和并行编译器。我们还确保尽可能少地需要完整构建。我们不会为了加快编译速度而修改代码
效率和正确性比编译速度更重要。在Visual Studio中,您可以设置一次要编译的项目数。其默认值为2,增加该值将减少一些时间
如果您不想弄乱代码,这将很有帮助。以下是我们在Linux下为开发所做的工作列表:
- 正如Warrior所指出的,使用并行构建(make-jN)
- 我们使用分布式构建(目前非常容易设置),在给定的时间内,我们可以使用十个或多个处理器。这还有一个优点,就是将构建提供给功能最强大、负载最轻的机器
- 我们使用ccache,这样当您进行makeclean时,您就不必重新编译没有更改的源代码,它是从缓存中复制的
- 还要注意的是,调试版本通常编译得更快,因为编译器不必进行优化
干杯我们曾经尝试过创建代理类
这些实际上是只包含公共接口的类的简化版本,减少了需要在头文件中公开的内部依赖项的数量。然而,他们付出了沉重的代价,将每个类分散在几个文件上,这些文件在更改类接口时都需要更新。一个有时有用的技巧是将所有内容都包含在一个.cpp文件中。由于每个文件只处理一次包含,因此可以节省大量时间。(这样做的缺点是编译器无法并行化编译) 您应该能够指定应并行编译多个.cpp文件(-j在linux上使用make,/MP在MSVC上使用-MSVC还可以选择并行编译多个项目。这些是单独的选项,没有理由不同时使用这两个选项) 同样,分布式构建(例如,IncredBuild)可能有助于减轻单个系统的负担
SSD磁盘应该是一个大的胜利,虽然我自己没有测试过(但是C++构建涉及大量的文件,这很快就会成为瓶颈)。 如果小心使用,预编译头也会有所帮助。(如果必须经常重新编译,它们也会伤害你)
最后,尽量减少代码本身的依赖性是很重要的。使用pImpl习惯用法,使用前向声明,使代码尽可能模块化。在某些情况下,使用模板可以帮助您解耦类并最小化依赖关系。(当然,在其他情况下,模板会显著降低编译速度) 但是是的,你是对的,这在很大程度上是一种语言。我不知道还有哪种语言会有如此严重的问题。大多数语言都有一个模块系统,允许它们消除头文件,这是一个巨大的因素。C有头文件,但它是一种非常简单的语言,编译时间仍然可以管理。C++是两个世界中最差的。一种庞大复杂的语言,一种可怕的原始构建机制,需要反复解析大量代码。Unity Builds 难以置信的建筑 指向实现的指针 转发声明编译“完成的”部分的DeLJCT到DLL的
< P> < /P> < P>在我所做的一般的大型C++项目中,这些构建的时间很慢,很难通过代码散布很多相互依存的关系(在大多数CPPS中使用的同样的文件,FAT接口,而不是瘦的文件)。在这些情况下,