使用一般规则输出的不同子集的Bazel规则 [英] Bazel rules that use different subsets of genrule outputs

查看:0
本文介绍了使用一般规则输出的不同子集的Bazel规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个代码生成器,可以生成三个输出文件:

  • client.cpp
  • server.cpp
  • data.h

一般规则如下所示:

genrule(
  name = 'code_gen',
  tools = [ '//tools:code_gen.sh' ],
  outs = [ 'client.cpp', 'server.cpp', 'data.h' ],
  local = True,
  cmd = '$(location //tools:code_gen.sh) $(@D)')

"client.cpp"和"server.cpp"各有自己的cc_库规则。

我的问题是如何依赖一般规则,但只使用特定的输出文件。

我所做的是创建一个宏来定义一般规则,并将特定的out设置为所需的文件,但这导致了一般规则

的多次执行

gen.bzl

def code_generator(
  name,
  out):
  native.genrule(
    name = name,
    tools = [ '//bazel:gen.sh' ],
    outs = [ out ],
    local = True,
    cmd = '$(location //bazel:gen.sh) $(@D)')

内部版本

load(':gen.bzl', 'code_generator')
code_generator('client_cpp', 'client.cpp')
code_generator('server_cpp', 'server.cpp')
code_generator('data_h', 'data.h')

cc_library(
  name = 'client',
  srcs = [ ':client_cpp' ],
  hdrs = [ ':data_h' ],
)

cc_library(
  name = 'server',
  srcs = [ ':server_cpp' ],
  hdrs = [ ':data_h' ],
)

是否有办法依赖于使其运行一次,然后仅使用从中选择的输出的一般规则?

推荐答案

您应该能够仅使用文件名(例如:server.cpp)来依赖于规则的特定输出。

这篇关于使用一般规则输出的不同子集的Bazel规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆