(这与问题ccache and absolute path不同,因为我只希望在ccache主机上不扩展命令路径)
当同时使用ccache和distcc时,ccache会将编译器扩展到绝对路径,然后distcc无法使用远程计算机上的PATH选择要使用的编译器。
例如我将其称为CCACHE_PREFIX=distcc ccache g++ foo.cc
,然后ccache将其扩展为本地预处理步骤并进行缓存检查,然后以distcc /usr/bin/g++
的形式调用distcc,这是错误的版本(g++位于/usr/bin之前的远程路径中,但这没有给出完全没有机会搜索路径)。
我有各种不同的机器用作distcc主机,并且它们在不同位置安装了相同版本的gcc/g++(是的,如果将它们全部放在/usr/local之类的地方,此问题就消失了,但是我不能现在就执行此操作)。
是否有设置让ccache仅将g++
传递给distcc,而不是将路径扩展为本地编译器的绝对路径?如果尚无设置,我并不完全反对修补ccache,但这是不得已的方法:)
最佳答案
事实证明,有一个简单的方法可以做到这一点:只需使用CCACHE_PREFIX
的包装程序,而不是直接使用distcc
的包装程序即可,例如:
文件:distcc-wrap.sh
#!/bin/sh
compiler=$(basename $1)
shift
exec distcc "$compiler" "$@"
export CCACHE_PREFIX=distcc-wrap.sh
,然后这允许远程编译器住在其他地方,并且distcc会在PATH中搜索它。(感谢ccache邮件列表上的Joel给出了这个答案;有关原始消息,请参见http://www.mail-archive.com/[email protected]/msg00670.html)
关于path - 如何使ccache不将完整路径传递给distcc编译器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6249620/