in-tree 包含带有 bazel 自定义工具链的目录

in-tree include directory with bazel custom toolchain

是否可以配置 Bazel 自定义工具链以在存储库中包含目录?

假设我在存储库的根目录中有以下内容:

sysroots/armhf/include/myheader.h
sysroots/amd64/include/myheader.h

myproject1/component.cpp
myproject2/component.cpp

我想配置工具链,这样当我 运行 bazel build --config armhfcomponent.cpp 文件包括 myheader.h 时将从 sysroot/armhf/include 目录,当我 运行 bazel build --config amd64 时,使用了相应 sysroot/amd64 目录中的文件。

这需要在不修改包含 component.cpp 个文件的项目的情况下工作。

基本上我想在源存储库中检查平台特定的 headers 和二进制文件以及代码。

如果你还没有找到,你需要编写C++工具链。 Configure C++ Toolchains Tutorial 是一个很好的起点,如果您有更具体的问题,他们会作为单独的问题获得更好的答案。我将在这里专门回答路径问题。

大多数路径只是相对于 execution root. That typically means external/<repo_name>/<package>/<name> for paths in external repositories, or just <package>/<name> for paths in the main repository. bazel-toolchain's pkg_path_from_label function 实现此逻辑的正常路径,例如。在您的情况下,第一条路径是 sysroots/armhf/include

cxx_builtin_include_directories很特别。那里的路径有独特的语法来生成绝对路径。相关的看起来像 "%package(@your_toolchain//relative/clang/include)%"@your_toolchain 替换为您的存储库名称。在您的情况下,这意味着 "%package(@//sysroots/armhf)%/include/myheader.h"。根据包边界的位置(带有 BUILD 文件的最深文件夹),或多或少可能需要在 %package() 部分中。

这些指令在生成编译器命令行时得到扩展。除了 the source.

之外,我不知道有任何文档