distcc - 在某些情况下它需要一个同步的网络文件系统
distcc - are there cases it requires a synchronized network filesystem
两个简化的 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 可以 运行 并行,因为 of t2
on t1
.
但是,在分布式构建方面,可能会?/是否会? 有一个重要的区别。
在makefile1中,t2
直接依赖于artifact a.txt
也与目标本身的名称相同a.txt
.但是,在 makefile2 中,虽然 t1
的配方和工件与 a.txt
相同,但目标名称不是 a.txt
。
这个区别是关键,因为 gnu make
(我假设 distcc
)不解析配方 - 也不在 运行 时分析文件系统 - 以确定所有工件给定的目标。在 makefile2 中,gnu make
不会在 a.txt
和 t1
.
之间创建任何关系
当构建以 make -j
方式完成时,即并行但非分布式,此差异无关紧要,因为所有 make
目标都 运行 在同一台机器上 即所有 make
个实例访问同一个文件系统。
但是让我们考虑一下如果两个目标是在两个单独的机器[上构建的,那么在分布式构建期间会发生什么?/会发生什么? =40=]
在两个 makefile 中,t2
的配方将是 运行 在 a.txt
/t1
的配方之后。
但是,在 makefile1 中 t2
对 a.txt
的依赖是明确的,即 distcc
知道 在另一台机器上 make t2
,它必须将文件 a.txt
发送到那台单独的机器。
问题
- 如果 makefile2 运行 使用
distcc
,没有同步分布式文件系统,并且 t2
make
d另一台机器,是否会因为 a.txt
在另一台机器上不存在而出现构建错误?
- 分布式 Linux 文件系统有哪些选项?
distcc
只是 gcc
的替代品。它使用本地 gcc
对源文件进行预处理,然后将其发送到另一台机器进行编译,接收回目标文件并将其保存到本地文件系统中。 distcc
不需要共享网络文件系统或参与主机之间的时钟同步。
还有新的 "pump" 功能可以在远程服务器上进行预处理,但它不需要共享网络文件系统或时钟同步。
你的 make
总是 运行 在本地。
回答您的问题:
distcc
没有 运行 make
。 make
运行s distc
而不是 gcc
。 make
在本地检查依赖项及其时间戳。
make
运行在本地,它不关心它使用的文件系统是本地的还是网络的。
两个简化的 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 可以 运行 并行,因为 of t2
on t1
.
但是,在分布式构建方面,可能会?/是否会? 有一个重要的区别。
在makefile1中,t2
直接依赖于artifact a.txt
也与目标本身的名称相同a.txt
.但是,在 makefile2 中,虽然 t1
的配方和工件与 a.txt
相同,但目标名称不是 a.txt
。
这个区别是关键,因为 gnu make
(我假设 distcc
)不解析配方 - 也不在 运行 时分析文件系统 - 以确定所有工件给定的目标。在 makefile2 中,gnu make
不会在 a.txt
和 t1
.
当构建以 make -j
方式完成时,即并行但非分布式,此差异无关紧要,因为所有 make
目标都 运行 在同一台机器上 即所有 make
个实例访问同一个文件系统。
但是让我们考虑一下如果两个目标是在两个单独的机器[上构建的,那么在分布式构建期间会发生什么?/会发生什么? =40=]
在两个 makefile 中,t2
的配方将是 运行 在 a.txt
/t1
的配方之后。
但是,在 makefile1 中 t2
对 a.txt
的依赖是明确的,即 distcc
知道 在另一台机器上 make t2
,它必须将文件 a.txt
发送到那台单独的机器。
问题
- 如果 makefile2 运行 使用
distcc
,没有同步分布式文件系统,并且t2
make
d另一台机器,是否会因为a.txt
在另一台机器上不存在而出现构建错误? - 分布式 Linux 文件系统有哪些选项?
distcc
只是 gcc
的替代品。它使用本地 gcc
对源文件进行预处理,然后将其发送到另一台机器进行编译,接收回目标文件并将其保存到本地文件系统中。 distcc
不需要共享网络文件系统或参与主机之间的时钟同步。
还有新的 "pump" 功能可以在远程服务器上进行预处理,但它不需要共享网络文件系统或时钟同步。
你的 make
总是 运行 在本地。
回答您的问题:
distcc
没有 运行make
。make
运行sdistc
而不是gcc
。make
在本地检查依赖项及其时间戳。make
运行在本地,它不关心它使用的文件系统是本地的还是网络的。