我有一个目标,只能在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