Как заставить Bazel, ccache и песочницу работать вместе (файловая система ccache только для чтения)
Я пытаюсь построить приложение C++ на Fedora 28, используя Bazel 0.16.1, установленный через copr, и ccache 3.4.2, установленный через DNF. Я использую стандартные правила 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 смонтировать мой каталог ccache r/w, или как мне сказать ccache через bazel, где находится правильный каталог кэша для моей рабочей области?
Когда я запускаю ту же команду в Ubuntu 18.04, она успешно выполняется, поэтому я полагаю, что ccache каким-то образом поддерживается.
Похоже, что часть моей проблемы в том, что ccache установил свой драйвер компилятора как gcc. Например which gcc -> /usr/lib64/ccache/gcc
, Где в Ubuntu должен явно вызываться ccache, а набор инструментов по умолчанию не вызывает его.
2 ответа
Вы можете добавить существующие каталоги в песочницу с помощью --sandbox_writable_path=<path>
[1].
[1] https://docs.bazel.build/versions/master/command-line-reference.html
Была такая же проблема в Fedora 29, в моем случае была решена путем экспорта следующих переменных среды:
export CC="/usr/bin/gcc"
export CXX="/usr/bin/g++"