限制 Bazel 目标到特定平台

5
我有一个目标,只能在Linux上构建(在这种情况下,因为它依赖于仅在Linux上可用的系统调用,并且没有试图使其跨平台)。我该如何在我的BUILD文件中表达这一点?
我可以从平台文档中看到存在一个名为@bazel_tools//platforms:linux的Linux平台定义,但我不清楚如何利用它来限制目标。尝试在compatible_with中指定此内容会导致出现错误,例如:
(13:27:09) ERROR: /foo/BUILD:4:1: in compatible_with attribute of go_library rule //foo:go_default_library: constraint_value rule '@bazel_tools//platforms:linux' is misplaced here (expected environment). Since this rule was created by the macro 'go_library_macro', the error might have been caused by the macro implementation in /foo/BUILD:4:1

所以我有几个相关的问题:

  • 错误似乎表明我向compatible_with提供了错误类型的规则。什么是environment,如何提供它?(我很难找到相关文档)
  • 我了解到迁移到Platforms可能还没有完成,rules_go可能尚未更新。如果在Platforms上不可行,是否有“旧方法”可以代替?
  • 理想情况下,我希望在运行像bazel test //:all这样的命令时,不会导致构建错误(在非Linux平台上)。也就是说,我更希望它只是排除这些内容或其他操作。这可能吗?

感谢您的帮助。


如果你明确地(包括通配符)表示想要构建它,就不确定是否可以排除目标。你可以使用 select() 来仅在特定平台上将其作为依赖项(不)使用。但是,你也可以标记你的目标 manual,并将其从使用通配符指定的目标中排除。 - Ondrej K.
谢谢 - 我都试过了。select()的方法对我并不起作用,因为整个二进制文件在某个平台上无法构建。最终我采用了手动方式,直到https://github.com/bazelbuild/bazel/issues/3780得到解决。 - obeattie
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接