Если вы не определяете свою собственную цепочку инструментов, bazel пытается выполнить автоматическую c конфигурацию для вас, которая действительно учитывает значение переменной CC
при ее определении. Почему ваша голая попытка компиляции не удалась, не совсем ясно из части опубликованного сообщения об ошибке, но если вы сомневаетесь, вы можете добавить -s
в свою командную строку bazel, чтобы увидеть вызываемые команды и с помощью этого увидеть, какой компилятор был вызван:
$ CC=/usr/bin/clang bazel build -s //:hello
INFO: Analyzed target //:hello (1 packages loaded, 15 targets configured).
INFO: Found 1 target...
SUBCOMMAND: # //:greet [action 'Compiling greet.cpp', configuration: dd44f3279b21e91676f65783c46b7b7816026ef7e696e80c251418ec64ffdf5e]
(cd /tmp/_bzl/execroot/__main__ && \
exec env - \
PATH=/bin:/usr/bin:/usr/local/bin \
PWD=/proc/self/cwd \
/usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -I/usr/lib64/qt/include -MD -MF bazel-out/k8-fastbuild/bin/_objs/greet/greet.pic.d '-frandom-seed=bazel-out/k8-fastbuild/bin/_objs/greet/greet.pic.o' -fPIC -iquote . -iquote bazel-out/k8-fastbuild/bin -Ibazel-out/k8-fastbuild/bin/_virtual_includes/greet -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c greet.cpp -o bazel-out/k8-fastbuild/bin/_objs/greet/greet.pic.o)
SUBCOMMAND: # //:hello [action 'Compiling hello.cpp', configuration: dd44f3279b21e91676f65783c46b7b7816026ef7e696e80c251418ec64ffdf5e]
(cd /tmp/_bzl/execroot/__main__ && \
exec env - \
PATH=/bin:/usr/bin:/usr/local/bin \
PWD=/proc/self/cwd \
/usr/bin/clang -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer '-std=c++0x' -I/usr/lib64/qt/include -MD -MF bazel-out/k8-fastbuild/bin/_objs/hello/hello.pic.d '-frandom-seed=bazel-out/k8-fastbuild/bin/_objs/hello/hello.pic.o' -fPIC -iquote . -iquote bazel-out/k8-fastbuild/bin -iquote external/bazel_tools -iquote bazel-out/k8-fastbuild/bin/external/bazel_tools -Ibazel-out/k8-fastbuild/bin/_virtual_includes/greet -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c hello.cpp -o bazel-out/k8-fastbuild/bin/_objs/hello/hello.pic.o)
SUBCOMMAND: # //:hello [action 'Linking hello', configuration: dd44f3279b21e91676f65783c46b7b7816026ef7e696e80c251418ec64ffdf5e]
(cd /tmp/_bzl/execroot/__main__ && \
exec env - \
PATH=/bin:/usr/bin:/usr/local/bin \
PWD=/proc/self/cwd \
/usr/bin/clang @bazel-out/k8-fastbuild/bin/hello-2.params)
Target //:hello up-to-date:
bazel-bin/hello
INFO: Elapsed time: 1.606s, Critical Path: 0.44s
INFO: 3 processes: 3 linux-sandbox.
INFO: Build completed successfully, 5 total actions
Windows - это немного особенный / другой случай: я начал смотреть на соответствующий rules_cc
, но оттуда фактически вернулся к docs , в настоящее время Рекомендуемый метод - добавить определение платформы (например, в вашем рабочем пространстве root BUILD
):
platform(
name = "x64_windows-clang-cl",
constraint_values = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
"@bazel_tools//tools/cpp:clang-cl",
],
)
И зарегистрировать дополнительную цепочку инструментов в вашем файле WORKSPACE
:
register_execution_platforms(
":x64_windows-clang-cl"
)
register_toolchains(
"@local_config_cc//:cc-toolchain-x64_windows-clang-cl",
)
Затем (пока) используйте флаг --incompatible_enable_cc_toolchain_resolution
с bazel.
По крайней мере, на данный момент, в качестве альтернативы вы можете указать bazel использовать LLVM на Windows, запустив bazel с: --compiler=clang-cl
.
Вам может потребоваться установить BAZEL_LLVM
(на этот раз) как каталог, в котором установлен LLVM (или попробуйте использовать автоматическое разрешение c).
Тем не менее, это не так. похоже, вы могли бы использовать компилятор cygwin LLVM на Windows, все еще полагаясь на автоматическую конфигурацию c инструментальной цепочки. Я подозреваю, что вам действительно нужно будет определить свой собственный набор инструментов для этого (не уверен, с какими серьезными проблемами вы столкнетесь, пересекая границу между bazel для Windows и компилятором на основе cygwin, каждый из которых имеет разные представления о том, какие имена путей использовать).