分布式编译器在编译时需要依赖吗?

时间:2016-06-15 08:23:51

标签: compilation linker distributed

考虑使用诸如incredibuild或distcc之类的分布式编译器,假设我将编译作业发送到远程计算机以编译依赖于静态或动态库的C ++源文件(我需要安装以便构建我的库)程序)。远程机器是否需要该库才能编译它?

根据我对C和C ++的理解,当源文件被编译成目标文件时,编译器会“截取”源代码外部的任何内容(例如调用不在代码中的函数,即仅定义为标题的一部分)。当链接发生时,那就是需要存在依赖关系的时候,链接器可以检查它们找出函数的实现位置。如果是这种情况,这是否意味着,分布式编译器只有在安装了依赖项的情况下才能进行编译+链接?动态和静态库是否也适用?

1 个答案:

答案 0 :(得分:0)

构建顺序确实是任何成功编译过程的核心:)分布式构建必须在以更加并行的方式执行构建时获得相同的构建顺序。 当您使用IncrediBUild执行构建时,启动构建的机器正在管理构建过程,并确保每个分布式编译任务都将以正确的构建顺序构建,无论哪台机器实际执行构建。将编译任务发送到远程计算机时,它将与启动构建的计算机的基本环境设置一起发送。我们称之为“流程虚拟化”。 如果在编译该远程进程期间需要某个文件(如您所描述的场景),IncrediBuild可以从启动构建的计算机中获取它并将其放在远程计算机的缓存中。此文件将用于此编译任务,并将保留在远程计算机的缓存中以供将来使用。 由于这种机制,远程机器根本不需要任何源文件。它们基本上可以是常规的Windows机器 - 没有任何开发环境。 希望我能够对这个问题有所了解。