9

我正在尝试使用通过 copr 安装的 Bazel 0.16.1 和通过 DNF 安装的 ccache 3.4.2 在 Fedora 28 上构建 C++ 应用程序。我正在使用默认的 cc_binary 和 cc_library 规则。当我运行 bazel build 命令时,ccache 错误如下:

ccache: error: Failed to create temporary file for /home/mwalker/.ccache/tmp/time.stdout: Read-only file system

我可以看到当我构建时--verbose_failures --sandbox_debug我们没有挂载 ccache tmp 目录 r/w。

那么,如何让 bazel 以 r/w 方式挂载我的 ccache 目录,或者如何通过 bazel 告诉 ccache 我的工作区的正确缓存目录所在的位置?

当我在 Ubuntu 18.04 上运行相同的命令时,它会成功,所以这让我相信 ccache 以某种方式得到支持。

看起来我的问题的一部分是ccache将其编译器驱动程序安装为gcc。例如which gcc -> /usr/lib64/ccache/gcc。必须显式调用 Ubuntu ccache 上的位置,并且默认工具链不会调用它。

4

2 回答 2

6

--sandbox_writable_path=<path>您可以使用[1]将现有目录添加到沙箱。


[1] https://docs.bazel.build/versions/master/command-line-reference.html

于 2018-09-18T07:09:48.733 回答
3

在 Fedora 29 中遇到了同样的问题,在我的情况下,通过导出下一个环境变量来解决:

export CC="/usr/bin/gcc"
export CXX="/usr/bin/g++"

https://github.com/bazelbuild/bazel/issues/1322#issuecomment-226919588

于 2018-11-28T10:17:03.237 回答