两个简化的 makefile
生成文件1
a.txt:
echo “123144234” > a.txt
t2: a.txt
cat a.txt > b.txt
生成文件2
t1:
echo “123144234” > a.txt
t2: t1
cat a.txt > b.txt
两个 makefile 具有相同的功能。
由于on的依赖, 两个 makefile 可以并行运行。t2
t1
但是,有一个关键的区别可能?/确实?在分布式构建方面有所作为。
在makefile1中,t2
直接依赖于a.txt
与目标本身的名称相同的工件a.txt
。但是,在makefile2中,虽然配方和工件t1
与 for 相同a.txt
,但目标的名称不是a.txt
。
这种差异很关键,因为gnu make
(我假设distcc
)不解析配方 - 也不在运行时分析文件系统 - 以确定给定目标的所有工件。在makefile2中,gnu make
不会在a.txt
和之间创建任何关系t1
。
当构建以make -j
并行而不是分布式的方式完成时,这种差异是无关紧要的,因为所有make
目标都在同一台机器上运行,即所有make
实例都访问同一个文件系统。
但是让我们考虑一下可以做什么?/做什么?如果两个目标构建在两台不同的机器上,则在分布式构建期间发生
在这两个 makefile 中,配方t2
将在a.txt
/配方之后运行t1
。
但是,在makefile1t2
中, on的依赖a.txt
是明确的,即distcc
知道要make t2
在单独的机器上,它必须将文件发送a.txt
到该单独的机器。
问题
- 如果makefile2使用 运行
distcc
,没有同步的分布式文件系统,并且在另一台机器上t2
是make
d,是否会出现构建错误,因为a.txt
另一台机器上不存在? - 分布式 Linux 文件系统有哪些选项?