使用Bazel编译C#代码时@bazel_tools引用失败求助
解决Bazel平台定义中找不到@bazel_tools//platform的问题
嘿,我之前也踩过这个一模一样的坑!你遇到的错误根源其实是平台约束的路径写错了——Bazel的内置操作系统约束包是@bazel_tools//platforms(注意末尾的s),而不是你写的@bazel_tools//platform。
第一步:修正平台定义代码
把你原来的platform定义改成下面这样,修正constraint_values的路径即可:
platform( name = "darwin", constraint_values = [ "@bazel_tools//platforms:osx", ], ) platform( name = "windows", constraint_values = [ "@bazel_tools//platforms:windows", ], )
额外优化:直接使用内置约束,无需自定义平台
其实如果只是针对操作系统做命令分支,你甚至不用自己定义platform,直接在select里引用内置约束值就行,这样代码更简洁:
cmd = select({ "@bazel_tools//platforms:osx": "a bash command", "@bazel_tools//platforms:windows": "a long and complex windows command because windows is stupid and makes everything much much more complex than it has to be", "//conditions:default": "fallback command for other OSes", })
为什么会报错?
你理解的“内置@bazel_tools”完全没错,这个包确实是Bazel自带的,不需要额外配置。只是你把约束包的名字少写了一个s,导致Bazel找不到对应的BUILD文件,才抛出了那个让你困惑的错误。
内容的提问来源于stack exchange,提问作者Clearer
相关产品推荐
相关产品推荐

