如何解决基于带有bazel的工具链的select的最佳方法是什么?
文档(https://docs.bazel.build/configurable-attributes.html)提供了以下示例,很遗憾,该示例不起作用:
cc_library(
name = "my_lib",deps = select(
{
"//tools/cc_target_os:android": [":android_deps"],"//tools/cc_target_os:windows": [":windows_deps"],},no_match_error = "Please build with an Android or Windows toolchain",),)
诸如“ @ platforms // os:macos”和“ @ platforms // os:windows”之类的匹配器只能检测HOST平台,而不能检测TARGET平台。在不同的体系结构上交叉编译时,此操作会中断。
我想出了一个有效的“ android”匹配器:
config_setting(
name = "android",values = {"crosstool_top": "//external:android/crosstool"},)
但是无法找出匹配Windows,macos或linux TARGET工具链的方法。
谢谢!
解决方法
我认为您正在寻找平台:https://docs.bazel.build/versions/master/platforms.html和T average_of_3 (T a,T b,T c)
{
T r = ((T) (a + b + c)) / 3;
T rem = ((T) (a + b + c)) % 3;
T dummy;
T o = __builtin_add_overflow(a,b,&dummy) + __builtin_add_overflow((T) (a + b),c,&dummy);
r += -((o - 1) & 0xaaaaaaaaaaaaaaab) ^ 0x5555555555555555;
r += (rem + o + 1) >> 2;
return r;
}
上的target_compatible_with
属性。
我建议您要这样的东西:
cc_library
然后,my_lib的用户将不得不视情况依赖于my_lib_android或my_lib_windows。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。