首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Bazel跨平台方式设置C++版本?

如何使用Bazel跨平台方式设置C++版本?
EN

Stack Overflow用户
提问于 2022-02-10 15:34:22
回答 2查看 449关注 0票数 1

我希望我的Bazel项目能够使用c++17。有一个类似的问题(How to set C++ standard version when build with Bazel?),但是被接受的答案并没有移植到MSCV。

摩根士丹利资本国际需要--cxxopt='/std:c++17',gcc需要--cxxopt='--std=c++17'

有没有人有一个最小的示例配置,建立在最流行的Windows和Linux编译器(gcc,MSCV,clang)上,将版本设置为c++17?我很难理解工具链文档。

以下内容不起作用。

代码语言:javascript
复制
# .bazelrc

build --cxxopt=select({
    "@bazel_tools//src/conditions:windows": "/std:c++17",
    "//conditions:default": "--std=c++17",
})
EN

Stack Overflow用户

回答已采纳

发布于 2022-02-10 16:49:15

你可以在你的.bazelrc中做这样的事情

代码语言:javascript
复制
# GCC 9.3
build:gcc9 --cxxopt=-std=c++2a
build:gcc9 --cxxopt=-Wall
build:gcc9 --cxxopt=-Werror
##build:gcc9 --cxxopt=-Wextra
build:gcc9 --define compiler=gcc9_3_0

build:macos --cxxopt=-std=c++2a
build:macos --cxxopt=-Wall
#build:macos --cxxopt=-Werror
##build:macos --cxxopt=-Wextra
build:macos --define compiler=clang12

# Clang 13.0.0
build:clang13 --cxxopt=-std=c++17
#build:clang13 --cxxopt=-mavx
#build:clang13 --cxxopt=-mavx2
#build:clang13 --cxxopt=-msse4.2
#build:clang13 --cxxopt=-Werror
build:clang13 --define compiler=clang13
build:clang13 --incompatible_enable_cc_toolchain_resolution
build:clang13 --cxxopt=-mwaitpkg

# Mingw
build:mingw --cxxopt=-std=c++2a
#build:mingw --cxxopt=-Wall
#build:mingw --cxxopt=-Werror
#build:mingw --cxxopt=-Wextra
build:mingw --compiler=mingw-gcc

# Visual Studio 2019
build:vs2019 --cxxopt=/std:c++17
build:vs2019 --enable_runfiles # https://github.com/bazelbuild/bazel/issues/8843
build:vs2019 --define compiler=vs2019
build:vs2019 --copt=-DWIN32_LEAN_AND_MEAN
build:vs2019 --copt=-DNOGDI
build:vs2019 --host_copt=-DWIN32_LEAN_AND_MEAN
build:vs2019 --host_copt=-DNOGDI

# Visual Studio 2022
build:vs2022 --config=vs2019

然后在构建时选择一个配置,例如bazel --config=vs2022 //...

当您懒得每次在主目录中创建配置时(例如,~/.bazelrc,一个包含build --config=config_for_the_machine的文件)。

配置开关是昂贵的。如果您切换配置,Bazel需要重新运行很多东西。如果您打开一台计算机,通常在不同的信任(例如GCC和Clang)之间切换,那么使用Bazel远程缓存服务器。我在本地机器上使用了一个配置开关--这使得配置开关便宜,因为服务器能够为不同的配置存储工件,而Bazel似乎只存储最新配置的工件。

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71067900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档