从我所读到的能够使用带有distcc的泵模式要求你将make封装在pump
脚本中。但是,我没有在我的路径中找到它,我找不到它as a package或包含在distcc package中的Cygwin。
然而,当我使用distcc进行编译并使用distccmon-text来监视联系的主机及其阶段时,我清楚地看到其中一些主机有时处于 Preprocess 阶段。我认为当不使用 pump 模式时,所有预处理都是在执行make脚本的客户端上完成的。泵模式的整个想法是在远程主机上进行预处理(因此需要相同的包含文件)。
这让我很困惑。 我的主要问题是:确切的步骤是什么:启动,已阻止,已连接,预处理< dist的意思是/ em>, Conect ,发送,接收和完成?
作为子问题:如何在Cygwin中使用带distcc的泵模式?
答案 0 :(得分:7)
究竟什么是distcc的阶段 意思?
好的,这很令人尴尬,但我只是在网上浪费了四个小时试图回答这个问题。下次我将拉动源并查看它。但是,你提出了一个好点:令人惊讶的是这不是现成的信息。
这些是我的遗产 (因为我不想承认我浪费了四个小时没有回答这个问题!):
flock
”文件来阻止注意:由于谷歌的“泵模式”算法,客户端(运行distcc
)和志愿者(运行distccd
)之间实际上存在相当多的“握手”现象。 。首先,在泵模式下,所有预期“需要”的标头被捆绑,压缩并推送给志愿者(在客户端机器上将其解压缩到本地镜像中)。但是,似乎志愿者和客户之间的一些进一步沟通可以根据需要逐步转移其他标题,这样就可以解释上面列出的“更丰富”的通信阶段/状态。
Am I already using pump mode?
我非常怀疑它,因为您没有通过make
或scons
包装编译选项来配置它(运行Google算法以预测捆绑和传输的标头使用情况所必需的)志愿者),你也找不到“泵”剧本。但是,我无法解释您在志愿者身上看到的“Preprocess
”状态。 (您不是指客户端上的“预处理”状态,对吗?这完全可以理解,因为默认情况下预处理在客户端上。)
相反,我认为实现使成为可能硬状态机将在所有状态中移动,包括“预处理”,即使在没有预处理要做的情况下,也会在它进行之前到下一个州。例如,即使它没有在志愿者方面进行预处理,distccd也会收到源文件,将其写入磁盘,然后启动编译器。如果您使用的是Cywin,那么这些并不是即时的,特别是如果它是一个大型源文件(特别是在其中包含所有标题之后)。因此,您可能会看到“预处理”阶段,直到它手动启动编译操作本身的下一阶段。
嘿......我没有看到一个明显的“编译”阶段,所以“预处理”阶段体现“编译”或“预处理和编译”是可能的(因为这些阶段经常组合在一起)无论如何编译器)。
抱歉 - 我只是在猜测。
如何在Cygwin中使用泵模式?
我没有尝试过,但它应该是可能的。显然Cygwin
最常见的问题是,在TMPDIR
在Cygwin下运行时,某些Windows编译器无法处理默认的distcc
设置。解决方法是在export TMPDIR=c:/temp
/etc/profile
之类的内容
常见问题解答可以提供更多帮助:http://distcc.googlecode.com/svn/trunk/doc/web/faq.html