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 armhf
、component.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.
之外,我不知道有任何文档
是否可以配置 Bazel 自定义工具链以在存储库中包含目录?
假设我在存储库的根目录中有以下内容:
sysroots/armhf/include/myheader.h
sysroots/amd64/include/myheader.h
myproject1/component.cpp
myproject2/component.cpp
我想配置工具链,这样当我 运行 bazel build --config armhf
、component.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.
之外,我不知道有任何文档