【问题标题】:Configure bazel toolchain without modifying project/workspace在不修改项目/工作区的情况下配置 bazel 工具链
【发布时间】:2021-04-16 15:29:49
【问题描述】:

我有一个 Bazel 项目(新的 tcmalloc),我正在尝试将其集成到一个典型的 GNU Make 项目中,该项目使用它自己的编译器/libc++ 构建。目标是不分叉上游项目。

如果我将所有 C++ 选项正确传递给 bazel(其中一组是 -nostdinc++ -I<path to libc++>),Bazel 很高兴 The include path '/home/vlovich/myproject/deps/toolchain/libc++/trunk/include' references a path outside of the execution root.(tcmalloc 是一个 git 子模块兄弟 @deps/tcmalloc)。可以通过给 Bazel 一个自定义脚本来调用这个“工作”,作为注入这些标志的编译器,这样 Bazel 就永远不会看到它们。但是,我只想定义一个工具链才能正常工作。

我已经阅读了我能找到的关于这个主题的所有文档,但我不清楚如何将所有这些文档粘合在一起。

特别不清楚我应该将工具链定义文件放在哪里,或者如何告诉 Bazel 找到这些定义。有没有办法给 bazel 一个用于查找工具链定义的目录?我是否希望创建一个顶级 WORKSPACE @/home/vlovich/myproject 并在那里注册 tcmalloc 和我的工具链,然后从 /home/vlovich/myproject 而不是 /home/vlovich/myproject/deps/tcmalloc 调用 bazel?

【问题讨论】:

    标签: bazel


    【解决方案1】:

    工具链支持相当复杂,如果你不是 bazel 维护者,很难理解。

    您可以使用CCCXX 环境变量来设置不同的编译器,例如:CC=your_c_compiler CXX=your_c++_compiler bazel build ...。您可以编写自己的自定义脚本包装器,它将充当普通的 C++ 编译器

    -I<path to libc++> 不起作用,因为所有正常的包含路径都必须在 srcs 属性中定义,或者通过 deps 属性指示的依赖项定义。对于系统范围的依赖项,请使用 -isystem 阅读更多相关信息 https://stackoverflow.com/a/44061589/4638604

    【讨论】:

    • 嗯.... 即使使用 -isystem ,它也会抱怨引用执行根目录之外的路径。不是针对 libc++,而是针对不同的库。我原以为 Bazel 会一视同仁地对待所有 -isystem? FWIW 我很高兴认为自己是 Bazel 专家,可以尝试使用工具链。我遇到的两个障碍是如何在构建 3p 项目时指定工具链,当我给它一个相对工具链路径时,bazel 崩溃(我不确定如何计算绝对路径,而不管用户的主目录如何)。跨度>
    • (我可以从编译器路径中省略其他库 - 只是好奇)
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2010-10-03
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多