简体   繁体   English

使用Genrule输出的不同子集的Bazel规则

[英]Bazel rules that use different subsets of genrule outputs

I have a code generator that produces three output files: 我有一个生成三个输出文件的代码生成器:

  • client.cpp client.cpp
  • server.cpp server.cpp
  • data.h 数据

The genrule looks like this: genrule看起来是这样的:

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)')

The 'client.cpp' and 'server.cpp' each have their own cc_library rule. “ client.cpp”和“ server.cpp”都有各自的cc_library规则。

My question is how to depend on the genrule but only use a specific output file. 我的问题是如何依赖类别,但仅使用特定的输出文件。

What I did is create a macro that defined the genrule with specific outs set to the file required, but this resulted in multiple execution of the genrule : 我所做的是创建一个宏,该宏定义了genrule,并将特定输出设置为所需的文件,但这导致了genrule的多次执行:

gen.bzl : 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)')

BUILD 建立

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' ],
)

Is there a way to depend on a genrule making it run once and then use only selected outputs from it? 有没有一种方法可以使某个规则运行一次,然后仅使用其中的选定输出?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM