繁体   English   中英

使用 Bazel 更改编译器命令行

[英]Change compiler command line with Bazel

我想在编译和链接 C++ 文件时完全控制 Bazel 传递给编译器的命令行参数。 例如,我想使用自定义路径中的 G++,我想将-std=c++0x更改为-std=c++14并删除-fno-omit-frame-pointer -以下约束:

  • 避免通过CC envvar 设置编译器,因为它很脆弱
  • 避免使用--crosstool_top等。 al,据我所知 Bazel 正在远离它
  • 与 --all_incompatible_changes 兼容
  • 不要简单地通过copts覆盖这些 args ,因为它很脆弱并且会使命令容易出错

最好,我希望自动检测、生成的工具链、修改它并将其提交到我的工作区,以供工作区中的每个 C++ 目标使用,包括从源编译的工作区导入的。

我查看了ToolchainsConfiguring C++ toolchainrules_cc - 但我想不通。

默认参数(例如: -fno-omit-frame-pointer-std=c++0x )可以通过禁用提供它们的default_compile_flags功能来删除:

$ bazel build ... --features=-default_compile_flags

.bazelrc添加到您的项目中。 添加行

build:your_config --cxxopt=-std=c++14

构建你的代码:

bazel build --config=your_config //...

您也可以在整个包的 BUILD 文件中执行此操作:

package(features = ["-default_compile_flags"])

或在特定的二进制文件上:

cc_binary(
    name = "cppversion",
    srcs = ["cppversion.cpp"],
    copts = ["--std=c++14"],
    features = ["-default_compile_flags"]
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM