关于 config_setting 与 Bazel 的疑问
Doubts regarding config_setting with Bazel
我正在尝试了解 config_setting
以检测底层平台并有一些疑问。你能帮我澄清一下吗?
x64_windows
和x64_windows_(msvc|msys)
cpu有什么区别?如果我为所有这些创建 config_setting,是否只有其中一个会触发?我应该忽略 x64_windows
吗?
检测Windows,推荐的方法是什么?目前我在做:
config_setting(
name = "windows",
values = {"crosstool_top": "//crosstools/windows"},
)
config_setting(
name = "windows_msvc",
values = {
"crosstool_top": "//crosstools/windows",
"cpu": "x64_windows_msvc",
},
)
config_setting(
name = "windows_msys",
values = {
"crosstool_top": "//crosstools/windows",
"cpu": "x64_windows_msys",
},
)
通过使用这个我想用:windows
来匹配所有Windows版本和:windows_msvc
,例如,只匹配MSVC .这是最好的方法吗?
darwin
和darwin_x86_64
cpu有什么区别?我知道它们与 macOS 匹配,但在为 macOS 选择某些东西时是否需要始终指定两者?如果没有,是否有更好的方法来仅用一个 config_setting
来检测 macOS?就像使用 //crosstools
和 Windows?
如何检测Linux?我知道您可以先检测您关心的操作系统,然后再使用 //conditions:default
,但最好有一种方法可以专门检测 Linux 而不是将其保留为默认值。
什么是k8
、piii
等?是否有任何文档描述了所有可能的 cpu 值及其含义?
如果我想使用 //crosstools
来检测每个平台,有什么地方可以查找所有可用的交叉工具吗?
谢谢!
所有问题都很好。让我一一解决:
--cpu=x64_windows_msys
触发依赖于 MSYS/Cygwin 的 C++ 工具链。 --cpu=x64_windows_msvc
触发 Windows-native (MSVC) 工具链。 -cpu=x64_windows
触发默认值,它仍然是 MSYS 但 being converted 到 MSVC。
你想支持哪些由你决定,但支持所有的通用性可能是最安全的(如果一个只是另一个的别名,它不需要非常复杂的逻辑)。
一次只能触发一个config_setting
。
除非您使用自定义 -crosstool_top=
标志来指定 Windows 构建,否则您可能希望在 --cpu
上触发,例如:
config_setting(
name = "windows",
values = {"cpu": "x64_windows"}
现在没有很好的方法来定义 all Windows。这是 Bazel 当前识别 平台 能力的缺陷,--cpu
和 --crosstool_top
等设置并没有完全正确地建模。 Ongoing work 开创先河class 概念平台,为您提供最佳解决方案。但目前 --cpu
可能是您最好的选择。
这基本上与 Windows 相同。但据我所知,默认交叉工具只有 darwin
,没有 darwin_x86_64
.
目前最好使用您不想使用的 //conditions:default
方法。一旦第一个 class 平台可用,将为您提供所需的保真度。
k8
和piii
分别是86个64位和32位CPU的假名。按照惯例,它们也往往与 "Linux" 相关联,尽管这不能保证 1-1 匹配。
没有确定的"all possible CPU values"。基本上,--cpu
只是一个字符串,它在 CROSSTOOL 文件中解析为具有与该字符串匹配的标识符的工具链。这允许您为要自己编码的新 CPU 类型编写新的 CROSSTOOL 文件。因此,确切的可用 CPU 集取决于谁在使用 Bazel 以及他们如何设置工作区。
同5.一样的原因,没有确定的名单。请参阅 Bazel 的 github tools/
目录以获取对默认值的引用。
我正在尝试了解 config_setting
以检测底层平台并有一些疑问。你能帮我澄清一下吗?
x64_windows
和x64_windows_(msvc|msys)
cpu有什么区别?如果我为所有这些创建 config_setting,是否只有其中一个会触发?我应该忽略x64_windows
吗?检测Windows,推荐的方法是什么?目前我在做:
config_setting( name = "windows", values = {"crosstool_top": "//crosstools/windows"}, ) config_setting( name = "windows_msvc", values = { "crosstool_top": "//crosstools/windows", "cpu": "x64_windows_msvc", }, ) config_setting( name = "windows_msys", values = { "crosstool_top": "//crosstools/windows", "cpu": "x64_windows_msys", }, )
通过使用这个我想用
:windows
来匹配所有Windows版本和:windows_msvc
,例如,只匹配MSVC .这是最好的方法吗?darwin
和darwin_x86_64
cpu有什么区别?我知道它们与 macOS 匹配,但在为 macOS 选择某些东西时是否需要始终指定两者?如果没有,是否有更好的方法来仅用一个config_setting
来检测 macOS?就像使用//crosstools
和 Windows?如何检测Linux?我知道您可以先检测您关心的操作系统,然后再使用
//conditions:default
,但最好有一种方法可以专门检测 Linux 而不是将其保留为默认值。什么是
k8
、piii
等?是否有任何文档描述了所有可能的 cpu 值及其含义?如果我想使用
//crosstools
来检测每个平台,有什么地方可以查找所有可用的交叉工具吗?
谢谢!
所有问题都很好。让我一一解决:
--cpu=x64_windows_msys
触发依赖于 MSYS/Cygwin 的 C++ 工具链。--cpu=x64_windows_msvc
触发 Windows-native (MSVC) 工具链。-cpu=x64_windows
触发默认值,它仍然是 MSYS 但 being converted 到 MSVC。你想支持哪些由你决定,但支持所有的通用性可能是最安全的(如果一个只是另一个的别名,它不需要非常复杂的逻辑)。
一次只能触发一个
config_setting
。除非您使用自定义
-crosstool_top=
标志来指定 Windows 构建,否则您可能希望在--cpu
上触发,例如:config_setting( name = "windows", values = {"cpu": "x64_windows"}
现在没有很好的方法来定义 all Windows。这是 Bazel 当前识别 平台 能力的缺陷,
--cpu
和--crosstool_top
等设置并没有完全正确地建模。 Ongoing work 开创先河class 概念平台,为您提供最佳解决方案。但目前--cpu
可能是您最好的选择。这基本上与 Windows 相同。但据我所知,默认交叉工具只有
darwin
,没有darwin_x86_64
.目前最好使用您不想使用的
//conditions:default
方法。一旦第一个 class 平台可用,将为您提供所需的保真度。k8
和piii
分别是86个64位和32位CPU的假名。按照惯例,它们也往往与 "Linux" 相关联,尽管这不能保证 1-1 匹配。没有确定的"all possible CPU values"。基本上,
--cpu
只是一个字符串,它在 CROSSTOOL 文件中解析为具有与该字符串匹配的标识符的工具链。这允许您为要自己编码的新 CPU 类型编写新的 CROSSTOOL 文件。因此,确切的可用 CPU 集取决于谁在使用 Bazel 以及他们如何设置工作区。同5.一样的原因,没有确定的名单。请参阅 Bazel 的 github
tools/
目录以获取对默认值的引用。