Makefile distcc-是否有需要同步网络文件系统的情况
两个简化的makefile makefile1Makefile 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的依赖关系 然而,有一个关键的区别,它可能?/会?当涉
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
而出现生成错误gcc
对源文件进行预处理,然后将其发送到另一台机器进行编译,接收回目标文件并将其保存到本地文件系统中distcc
不需要共享网络文件系统或参与主机之间的时钟同步
还有一些新的“泵”功能可以在远程服务器上进行预处理,但它也不需要共享网络文件系统或时钟同步
您的make
始终在本地运行
回答您的问题:
distcc
不运行make
make
运行distc
而不是gcc
<代码>生成在本地检查依赖项及其时间戳make
在本地运行,它不关心它使用的文件系统是本地的还是网络的在其他机器上只运行compile命令,而不是整个
make
recipe,这是有道理的。“那么,你根本不必关心我的案子了。”鲍勃:食谱也在本地运行。它在本地运行distcc
,在引擎盖下与distcc
服务器通信。