Bazel 创建repository_rule

Bazel的repository_rule

一直使用Bazel内建的repository (git_repository, http_archive, etc),但实际上bazel提供了自定义的repository_rule给我们自定义repository的rule,以提高我们定义库的方式。

一个例子

假如在一个远端git上有一个c++的库A,它是一个预编译过的库。也就是说它包含一个lib目录,里面有.a和.so文件,但是在这个库A的BUILD文件里,它是这么写的:

cc_library(
    name = "module_a",
    hdrs = glob(["include/*.h"]),
    srcs = glob(["lib/*.a"]),
)

很显然,这个库只提供了静态库,并不提供动态库。

突然有一天由于某些特殊原因,我们需要使用这个库里的so,而不是.a,我们会怎么做?

最直接的思路就是在库A里增加一个cc_library的rule “libmodule_a”,这个rule的srcs里只包含.so。然后把我们自己库里的所有依赖都改个遍,把依赖@A//:module_a 都换成@A//:libmodule_a。

但是非常不幸,对于库A我们没有修改权限,并且对于本地编译来说,我们既要提供依赖.a的编译方式,也需要提供.so的编译方式。

怎么办?可能另一个思路是,对于库A我们使用new_git_repository的rule,然后对其指定我们本地的有动态库rule的BUILD文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值