两个简化的makefile
makefile1
a.txt:
echo “123144234” > a.txt
t2: a.txt
cat a.txt > b.txtmakefile2
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。
这种差异之所以关键,是因为gnu make (我假设是distcc)没有解析食谱--也没有在运行时分析文件系统--来确定给定目标的所有工件。在makefile2中,gnu make不创建a.txt和t1之间的任何关系。
当构建是以make -j (即并行但非分布式)的方式完成时,这种差异是无关紧要的,因为所有make目标都运行在同一台机器上,即所有make实例都访问同一个文件系统。
但让我们考虑一下什么可以?/做什么?如果两个目标构建在两个独立的机器上,则在分布式构建过程中发生。
在这两个makefile中,t2的配方将在a.txt/t1的配方之后运行。
但是,在makefile1中,t2对a.txt的依赖是显式的,即distcc 知道对于单独的机器上的make t2,它必须将文件a.txt发送到该单独的机器。
问题
如果在没有同步分布式文件系统的情况下,使用machine?
t2是maked,则会不会出现构建错误,因为其他
a.txt是分布式Linux文件系统的选项?
G 255
发布于 2020-02-18 17:59:46
distcc仅仅是gcc的替代品。它使用本地gcc对源文件进行预处理,然后将其发送到另一台计算机进行编译,接收回对象文件并将其保存到本地文件系统中。distcc不需要参与主机之间的共享网络文件系统或时钟同步。
有一个新的“泵”功能,可以在远程服务器上进行预处理,但它也不需要共享网络文件系统或时钟同步。
您的make总是在本地运行。
回答你的问题:
distcc不运行make。make运行distc而不是gcc。locally.make检查依赖项及其时间戳,make在本地运行,不关心它使用的文件系统是本地的还是网络的。https://stackoverflow.com/questions/60178859
复制相似问题