gpt4 book ai didi

makefile - distcc - 是否存在需要同步网络文件系统的情况

转载 作者:行者123 更新时间:2023-12-02 20:14:56 27 4
gpt4 key购买 nike

两个简化的 makefile

ma​​kefile1

a.txt:
echo “123144234” > a.txt

t2: a.txt
cat a.txt > b.txt

ma​​kefile2

t1:
echo “123144234” > a.txt

t2: t1
cat a.txt > b.txt

两个 makefile 具有相同的功能。

两个 makefile 都可以并行运行,因为 t2 t1 的依赖性。

但是,在分布式构建方面存在一个关键的差异,可能?/确实?会产生影响。

ma​​kefile1中,t2直接依赖于工件a.txt,它也与目标本身的名称相同a.txt。但是,在 ma​​kefile2 中,虽然 t1 的配方和工件与 a.txt 相同,但目标名称不是 a.txt.

这种差异是关键,因为 gnu make (我假设 distcc)不会解析配方 - 也不在运行时分析文件系统 - 以确定一个项目的所有工件给定的目标。在 ma​​kefile2 中,gnu make 不会在 a.txtt1 之间创建任何关系。

当构建以 make -j 方式完成时,即并行但不是分布式,这种差异是无关紧要的,因为所有 make 目标都在同一台机器上运行/em> 即所有 make 实例访问同一文件系统。

但是让我们考虑一下,如果两个目标构建在两台独立的机器上,那么在分布式构建过程中可能会发生什么?会发生什么

在两个 makefile 中,t2 的配方将在 a.txt/t1 的配方之后运行。

但是,在 ma​​kefile1 中,t2a.txt 的依赖是明确的,即 distcc 知道要在单独的计算机上make t2,它必须将文件a.txt发送到该单独的计算机。

问题

  1. 如果 ma​​kefile2 使用 distcc 运行,没有同步的分布式文件系统,并且 t2maked另一台机器上,是否会因为另一台机器上不存在 a.txt 而出现构建错误?
  2. 分布式 Linux 文件系统有哪些选项?

最佳答案

distcc只是 gcc 的替代品。它使用本地 gcc 预处理源文件,然后将其发送到另一台机器进行编译,接收回目标文件并将其保存到本地文件系统中。 distcc 不需要参与主机之间的共享网络文件系统或时钟同步。

还有一个新的“泵”功能,可以在远程服务器上进行预处理,但它也不需要共享网络文件系统或时钟同步。

您的 make 始终在本地运行。

回答您的问题:

  1. distcc 不运行 makemake 运行 distc 而不是 gccmake 在本地检查依赖项及其时间戳。
  2. make 在本地运行,它不关心它使用的文件系统是本地的还是网络的。

关于makefile - distcc - 是否存在需要同步网络文件系统的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60178859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com