获取Bazel工具链配置文件中包的运行时路径
在Bazel处理的任意文件中引用外部包路径的最佳方法是什么 我试图了解Bazel如何预处理BUILD和.bzl文件。我看到字符串包含对package()的调用,我想知道它是如何工作的(并且找不到任何相关文档)。以下是一个例子: 我有一个工具链,其中构建文件包含以下表达式:获取Bazel工具链配置文件中包的运行时路径,bazel,starlark,Bazel,Starlark,在Bazel处理的任意文件中引用外部包路径的最佳方法是什么 我试图了解Bazel如何预处理BUILD和.bzl文件。我看到字符串包含对package()的调用,我想知道它是如何工作的(并且找不到任何相关文档)。以下是一个例子: 我有一个工具链,其中构建文件包含以下表达式: cc\u工具链\u配置( name=“cc toolchain config”, abi_libc_version=“glibc_”+主机gcc8_bundle()[“pkg_version”][“glibc”], abi_v
cc\u工具链\u配置(
name=“cc toolchain config”,
abi_libc_version=“glibc_”+主机gcc8_bundle()[“pkg_version”][“glibc”],
abi_version=“gcc-”+host_gcc8_bundle()[“version”],
compiler=“gcc-”+host\u gcc8\u bundle()[“version”],
cpu=“x86_64”,
cxx\u内置\u包含\u目录=[
“%package(@host\u gcc8\u toolchain//include/c++/8)%”,
“%package(@host_gcc8_toolchain//lib64/gcc/x86_64-unknown-linux-gnu/8/include fixed)%”,
“%package(@host\u gcc8\u kernel\u headers//include)%”,
“%package(@host\u gcc8\u glibc//include)%”,
],
host_system_name=“x86_64-unknown-linux-gnu”,
target_libc=“glibc”+host_gcc8_bundle()[“pkg_version”][“glibc”],
target_system_name=“x86_64-unknown-linux-gnu”,
工具链\u identifier=“主机\u linux\u gcc8”,
)
据我所知,cxx\u builtin\u include\u目录
定义了一个字符串列表,用作传递给GCC的--sysroot
选项,这些字符串的详细格式为%sysroot%
例如,由于包(@host\u gcc8\u toolchain//include/c++/8)对GCC没有任何意义,因此bazel必须以某种方式扩展此函数,以生成包中包含的文件的实际路径,然后再将其传递给编译器驱动程序
但它如何确定这需要扩展,并且它不是一个常规字符串呢?那么Bazel如何预处理构建文件呢?是因为%…%代码>模式?这在哪里有记录
“%package(@external\u package//target)%”
是一种可以在其他地方使用的模式吗?在任何构建文件中?我在哪里可以找到Bazel文档来说明它是如何工作的?这些指令是通过cc\u toolchain\u config
规则实现来扩展的,而不是对构建
文件(即,%包(@host\u gcc8\u glibc//include)%进行任何类型的预处理。”
被逐字地传递到cc\u toolchain\u config
规则中。)我不知道这些特殊的扩展在任何地方都有完整的文档记录,除了