Makefile distcc-是否有需要同步网络文件系统的情况

Makefile distcc-是否有需要同步网络文件系统的情况,makefile,distcc,Makefile,Distcc,两个简化的makefile makefile1 a.txt: echo “123144234” > a.txt t2: a.txt cat a.txt > b.txt makefile2 t1: echo “123144234” > a.txt t2: t1 cat a.txt > b.txt 两个makefile具有相同的功能 这两个makefile可以并行运行,因为t2对t1的依赖关系 然而,有一个关键的区别,它可能?/会?当涉

两个简化的makefile

makefile1

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

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

t1:
    echo “123144234” > a.txt

t2: t1
    cat a.txt > b.txt
两个makefile具有相同的功能

这两个makefile可以并行运行,因为
t2
t1
的依赖关系

然而,有一个关键的区别,它可能?/会?当涉及到分布式构建时,要有所作为

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

这种差异是关键,因为gnumake(我假设
distcc
)不解析配方,也不在运行时分析文件系统,以确定给定目标的所有工件。在makefile2中,
gnumake
不会在
a.txt
t1
之间创建任何关系

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

但是让我们考虑一下,可以做什么?如果两个目标构建在两台独立的机器上,则在分布式构建期间发生

在这两个生成文件中,
t2
的配方将在
a.txt
/
t1
的配方之后运行

但是,在makefile1中,
t2
a.txt
的依赖关系是明确的,即
distcc
知道
maket2
必须在单独的机器上发送文件
a.txt

问题

  • 如果使用
    distcc
    运行makefile2,而没有同步的分布式文件系统,并且
    t2
    在另一台机器上运行
    make
    d,是否会因为另一台机器上不存在
    a.txt
    而出现生成错误
  • 分布式Linux文件系统有哪些选项
  • 只不过是gcc的替代品。它使用本地
    gcc
    对源文件进行预处理,然后将其发送到另一台机器进行编译,接收回目标文件并将其保存到本地文件系统中
    distcc
    不需要共享网络文件系统或参与主机之间的时钟同步

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

    您的
    make
    始终在本地运行

    回答您的问题:

  • distcc
    不运行
    make
    make
    运行
    distc
    而不是
    gcc
    <代码>生成在本地检查依赖项及其时间戳
  • make
    在本地运行,它不关心它使用的文件系统是本地的还是网络的

  • 在其他机器上只运行compile命令,而不是整个
    make
    recipe,这是有道理的。“那么,你根本不必关心我的案子了。”鲍勃:食谱也在本地运行。它在本地运行
    distcc
    ,在引擎盖下与
    distcc
    服务器通信。