这是一个理论问题。
让我们说,我有1000台Raspberry Pi Zero计算机,我希望所有这些计算机都能编译一个庞大的C ++项目。我可以向每台机器发送一个源文件,用它需要的每个依赖项(头文件)进行编译,并使这台机器只编译一个单元来生成obj
文件。生成所有obj
个文件后,我需要链接它们。我不确定我是否可以拆分链接步骤,对我而言,它看起来像一个单一的过程,但我要说我有一台专用的强大单机来完成它。
所以这个问题 - 理论上会起作用吗?我的项目编译速度会快1000倍吗?链接过程是否很重?与预处理器/编译步骤相比需要多少时间?
答案 0 :(得分:2)
您可以使用distcc等工具在多台计算机上分发编译。您获得多少加速将取决于您的特定项目(例如源文件的大小和复杂性,编译计算机的速度,网络延迟等)。您可以进行小规模测试并进行测量。
正如您所说,链接通常是一个单一的过程,可能是大型项目的瓶颈。另一种方法是将项目拆分为多个共享库。然后,每次进行小的更改时都不需要大的链接步骤,但启动可执行文件可能会更慢,因为必须在运行时执行某些链接。
如果对项目的多个部分进行更改,则可以并行构建和链接这些库。
编译与链接所花费的时间取决于您的项目。