2017-04-12 74 views
0

config_setting怀疑我试图了解config_setting检测底层平台,并有一些疑虑。你能帮我澄清一下吗?关于与巴泽尔

  1. 是什么x64_windowsx64_windows_(msvc|msys) CPU之间的区别?如果我为它们创建了config_setting,那么只有其中一个会触发?我应该忽略x64_windows

  2. 要检测的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。这是做这件事的最好方法吗?

  3. darwindarwin_x86_64 cpus有什么区别?我知道它们匹配macOS,但是我需要在为macOS选择某些内容时始终指定它们吗?如果没有,是否有更好的方法来检测macros只有一个config_setting?就像在Windows中使用//crosstools一样?

  4. 如何检测Linux呢?我知道你可以首先检测你关心的操作系统,然后使用//conditions:default,但是有一种方法可以专门检测Linux并且不会将它作为默认设置。

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

  6. 如果我想用//crosstools来检测每个平台,有什么地方可以查找所有可用的crosstools吗?

谢谢!

回答

1

伟大的问题,所有。让我来解决这些问题一个接一个:

  1. --cpu=x64_windows_msys触发C++工具链,依靠MSYS/Cygwin的。 --cpu=x64_windows_msvc触发Windows本机(MSVC)工具链。 -cpu=x64_windows会触发默认设置,该设置仍然是MSYS,但对于MSVC而言为being converted

    需要哪些支持是你的,但它可能是最安全的,支持所有的通用性(如果一个只是一个别名为其他它不需要很复杂的逻辑)。

    只有一个config_setting可以同时触发。

  2. 除非you'e使用自定义-crosstool_top=标志指定的Windows版本,你可能会想触发--cpu,例如:

     
    config_setting(
        name = "windows", 
        values = {"cpu": "x64_windows"} 
    

    这里没有现在一个伟大的方式来定义所有的Windows 。这是Bazel目前的缺陷,它能够识别平台,其设置如--cpu--crosstool_top并不十分正确。 Ongoing work创建一流的平台概念将为您提供最佳的解决方案。但目前--cpu可能是您最好的选择。

  3. 这基本上和Windows一样。但据我所知,默认的crosstools只有darwin,没有darwin_x86_64

  4. 目前可能最好使用//conditions:default的方法,你宁愿不这样做。一旦有一流的平台可以提供你想要的保真度。

  5. k8piii分别是针对86个64位和32位CPU的假名。他们也倾向于按照惯例与“Linux”相关联,尽管这不是保证的1-1匹配。

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

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

+0

感谢您的详细解释!我了解该功能现在如何更好地工作。 – RenatoUtsch

+0

我想我会等待新平台功能发布时开始考虑构建我的多平台。感谢这个问题链接,当我搜索问题列表时,我没有看到它。这会有很大的帮助。 – RenatoUtsch