Как указать c ++ 17 для визуальной студии в bazel? - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь скомпилировать цель с помощью c ++ 17 с помощью Bazel и Visual Studio 2019 для Windows 10.

Я попытался установить --cxxopt='-std=c++17' внутри .bazelrc в том же каталоге моего рабочего пространства,но это не сработало.

Например, я получил ошибку

C:\Users\marki\plasty>bazel build --verbose_failures labeling:semantic_seg
INFO: Analyzed target //labeling:semantic_seg (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: C:/users/marki/plasty/labeling/BUILD:1:1: C++ compilation of rule '//labeling:semantic_seg' failed (Exit 2)
class template optional is only available with C++17 or later.
...
labeling/semantic_seg.cpp(183): error C2429: language feature 'structured bindings' requires compiler flag '/std:c++17'
Target //labeling:semantic_seg failed to build
INFO: Elapsed time: 1.184s, Critical Path: 0.84s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

Я также попытался --cxxopt='/std:c++17' с похожими результатами.

1 Ответ

2 голосов
/ 02 октября 2019

Вам нужно добавить опцию в cc_binary . Например:

cc_binary(
    name = "hello-main",
    srcs = ["hello-main.cpp"],
    deps = [":hellolib"],
    copts = ["/std:c++17"],
)

Эта опция будет передана компилятору cl.exe .

ОБНОВЛЕНИЕ

Есливы хотите собрать с опцией в bazelrc, для этого уже есть ответ: Как установить стандартную версию C ++ при сборке с Bazel? за исключением того, что она использует c ++ 11, поэтому для c ++17, добавьте их в .bazelrc

build:c++17 --cxxopt=-std=c++1z
build:c++17 --cxxopt=-stdlib=libc++
build:c++1z --cxxopt=-std=c++1z
build:c++1z --cxxopt=-stdlib=libc++
...