【问题标题】:Change compiler command line with Bazel使用 Bazel 更改编译器命令行
【发布时间】:2020-03-10 20:50:57
【问题描述】:

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

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

最好,我想获取自动检测、生成的工具链,对其进行修改,然后将其提交到我的工作区,以供工作区中的每个 C++ 目标使用,包括从源编译的工作区导入的。

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

【问题讨论】:

    标签: c++ bazel


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      构建您的代码:

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

      【讨论】:

      • 不幸的是,这种方法不允许直接配置编译器二进制文件和删除参数(例如:-fno-omit-frame-pointer
      【解决方案3】:

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

      package(features = ["-default_compile_flags"])
      

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多