关于Bazel配置设置的疑问

关于Bazel配置设置的疑问,bazel,Bazel,我试图理解检测底层平台的config\u设置,对此我有一些疑问。你能帮我澄清一下吗 x64_窗口和x64_窗口(msvc | msys)cpu之间有什么区别?如果我为它们创建配置设置,是否只会触发其中一个?我是否应该忽略x64_窗口 要检测窗口,建议使用什么方法?目前我正在做: config_setting( name = "windows", values = {"crosstool_top": "//crosstools/windows"}, ) config_settin

我试图理解检测底层平台的
config\u设置
,对此我有一些疑问。你能帮我澄清一下吗

  • x64_窗口
    x64_窗口(msvc | msys)
    cpu之间有什么区别?如果我为它们创建配置设置,是否只会触发其中一个?我是否应该忽略x64_窗口

  • 要检测窗口,建议使用什么方法?目前我正在做:

    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\u msvc
    ,例如,仅匹配msvc。这是最好的方法吗

  • darwin
    darwin\u x86\u 64
    cpu之间有什么区别?我知道它们与macOS相匹配,但在为macOS选择某些内容时,是否需要始终同时指定两者?如果没有,是否有更好的方法只使用一个
    config\u设置来检测macOS?像在Windows中使用
    //crosstools

  • 如何检测Linux?我知道您可以先检测您关心的操作系统,然后使用
    //条件:default
    ,但最好有一种方法专门检测Linux,而不是将其保留为默认值

  • 什么是
    k8
    piii
    等?是否有任何文档描述了所有可能的cpu值及其含义

  • 如果我想使用
    //crosstools
    检测每个平台,是否有地方可以查找所有可用的crosstools


  • 谢谢

    好问题,各位。让我逐一解决这些问题:

    代码> CPU= x64×WiDOWSMSMys/CODE >触发依赖于MySy/CygWin的C++工具链。代码>--cpu=x64\u windows\u msvc触发windows本机(msvc)工具链

    -cpu=x64_windows
    触发默认值,该值仍然是MSYS,但要发送到MSVC

    您想支持哪一个取决于您自己,但出于通用性考虑,支持所有这些可能是最安全的(如果一个只是另一个的别名,则不需要非常复杂的逻辑)

    一次只能触发一个
    config\u设置

  • 除非您使用自定义的
    -crosstool\u top=
    标志来指定Windows版本,否则您可能希望在
    -cpu
    上触发,例如:

    config_setting( name = "windows", values = {"cpu": "x64_windows"} 配置设置( name=“windows”, 值={“cpu”:“x64_windows”} 现在没有一个很好的方法来定义所有窗口。这是Bazel目前识别平台能力的一个缺陷,像
    --cpu
    --crosstool_top
    这样的设置并不是很好的建模方法。创建一流的平台概念将为您提供最佳的解决方案。但是现在
    --cpu可能是您的最佳选择

  • 这与Windows基本相同。但据我所知,默认的crosstools只有
    darwin
    ,没有
    darwin\ux86\u64

  • 目前可能最好使用
    //条件:默认值
    方法,而不要这样做。一旦有了一流的平台,这将为您提供所需的逼真度

  • k8
    piii
    分别是86个64位和32位CPU的笔名。根据惯例,它们也倾向于与“Linux”关联,尽管这不是保证1-1匹配

    没有确定的“所有可能的CPU值”集合。基本上,
    --cpu
    只是一个字符串,它在CROSSTOOL文件中解析为具有与该字符串匹配的标识符的工具链。这允许您为要自己编码的新cpu类型编写新的CROSSTOOL文件。因此,可用cpu的确切集合取决于谁在使用Bazel以及如何设置其工作区

  • 出于与5相同的原因,没有确定的列表。有关默认值的参考,请参阅Bazel的github
    tools/
    目录


  • 谢谢你的详细解释!我现在更了解该功能的工作原理了。我想我会等到新平台功能发布后再开始考虑构建多平台。谢谢你的问题链接,我在搜索问题列表时没有看到它。这会有很大帮助。