在不同的机器之间拆分编译

Split compilation among different machines

本文关键字:之间 拆分 编译 机器      更新时间:2023-10-16

这是一个理论问题。

比方说,我有1000台Raspberry Pi Zero计算机,我希望所有这些计算机都能编译一个巨大的C++项目。我可以向每台机器发送一个源文件,用它需要的每个依赖项(头)进行编译,并使这台机器只编译一个单元来生成obj文件。生成所有obj文件后,我需要将它们链接起来。我不确定我是否可以分割一个链接步骤,对我来说,这看起来像是一个整体的过程,但假设我有一台专用的强大的单机来完成

那么问题来了——它在理论上可行吗?我的项目编译速度会快1000倍吗?链接过程是否繁重?与预处理器/编译步骤相比需要多少时间?

您可以使用distcc等工具在多台计算机上分发编译。你能得到多少加速将取决于你的特定项目(如源文件的大小和复杂性、编译计算机的速度、网络延迟等)。你可以做一个小规模的测试并进行测量。

正如你所说,链接通常是一个单一的过程,可能是大型项目的瓶颈。另一种选择是将项目拆分为几个共享库。然后,您不需要每次进行小更改时都执行大的链接步骤,但启动可执行文件的速度可能会较慢,因为某些链接必须在运行时执行。

如果对项目的多个部分进行更改,则可以并行构建和链接这些库。

编译和链接所花费的时间取决于您的项目。