在C++工具链的上下文中,我试图理解cc_toolchain_suite和register_toolchains概念的区别,在我看来,它们似乎达到了相同的目的:基于命令行参数选择一个工具链。
参见https://docs.bazel.build/versions/master/toolchains.html for register_toolchains - https://docs.bazel.build/versions/master/cc-toolchain-config-reference.html for cc_toolchain_suite
有人能帮助理解这两个概念背后的微妙之处吗?
发布于 2022-02-01 04:16:34
TL;DR cc_toolchain_suite是遗留工具链配置系统的一部分。它仍然存在于Bazel中,因为对新API的迁移还没有完成。register_toolchains是更新的、统一的工具链API的一部分。在可能的情况下使用register_toolchains而不是cc_toolchain_suite/--*crosstool_top
最初,“工具链”的概念在Bazel中没有标准化,因此Java工具链的实现将与cc工具链非常不同。
在统一的starlark工具链API之前,cc工具链是在原始文本格式的“跨国界”文件中指定的。随着platforms和统一工具链API的引入,CROSSTOOL文件中的概念几乎被转换成新的统一平台/工具链starlark API。这主要是为了确保新旧API之间的兼容性。
旧的“CROSSTOOL”配置系统中的一个概念是“工具链套件”,它允许您定义一组针对不同CPU的工具链(这是在平台API引入之前)。
据我所知,cc_toolchain_suite仍然是Bazel的starlark的一部分的唯一原因是,一些苹果/安卓工具链还没有被完全迁移。
下面是几个方法在哪里的例子。请注意,这些工具链不再使用cc_toolchain_suite。
https://stackoverflow.com/questions/58291691
复制相似问题