2016-12-28 5 views
3

Я хочу использовать clang ++ вместо g ++ для компиляции моих файлов C++, в то время как g ++ является компилятором по умолчанию в системе.Как использовать clang ++ вместо g ++ в Bazel

Я пробовал sudo update-alternatives --install c++ c++ /home/guo/bin/clang++ 100 и установил CC окружающую среду. Но они не работают. Bazel по-прежнему использует g ++ в качестве компилятора.


Через час Bazel использует clang ++. Но произошла ошибка.

ERROR: /home/guo/utils/lib/BUILD:2:1: C++ compilation of rule '//utils/lib:get_pdf' failed: linux-sandbox failed: error executing command /home/guo/.cache/bazel/_bazel_guo/d2d93a82f24e8dc5485ac1b29928428e/execroot/_bin/linux-sandbox ... (remaining 41 argument(s) skipped). 
src/main/tools/linux-sandbox-pid1.cc:592: "execvp(/home/guo/lib/clang, 0x23abde0)": Permission denied 
Target //utils/lib:get_pdf failed to buildenter code here 
Use --verbose_failures to see the command lines of failed build steps. 
INFO: Elapsed time: 0.159s, Critical Path: 0.06s 

Ps: /home/guo/lib/clang является каталогом, не двоичная в моем компьютере. Я думаю, здесь должно быть /home/guo/bin/clang++, но я не знаю, как сообщить Bazel.


Пс: Кажется, вам нужно перезапустить сервер Bazel при изменении окружения.

ответ

3

Итак, правильный способ настройки вашей инструментальной привязки C++ для Bazel заключается в использовании CROSSTOOL. Поскольку это nontrivial endeavor, Bazel пытается автоматически определить вашу инструментальную цепочку с использованием сценария cc_configure.bzl. Этот скрипт проверяет некоторые переменные среды и, если они есть, он будет использовать значения оттуда. Чтобы настроить gcc, вы можете установить переменную CC, и Bazel возьмет ее (in _find_cc function).

Как эти кешированные результаты, запустите bazel clean --expunge, чтобы очистить кеш и повторить автоконфигурацию в следующий раз.

+0

Знаете ли вы, где находятся файлы CROSSTOOL? Что означает документация «каталог верхнего уровня инструментальной цепочки». Я помещаю его в то же место, что и файл WORKSPACE, но он, похоже, не подбирает его. – bantl23

+1

Вы должны задать это как отдельный вопрос, так что его легче найти для других людей. Bazel не ищет файлы CROSSTOOL в любом месте, вы должны указать, где искать, например. используя --crosstool_top = .... Взгляните сюда для получения дополнительной информации: https://github.com/bazelbuild/bazel/wiki/Building-with-a-custom-toolchain – mhlopko

Смежные вопросы