如何从bazel中的cc_library指定输出伪像?

时间:2019-12-23 11:29:14

标签: bazel

我想将“ foo.c”构建为一个库,然后在生成的.so上执行“ readelf”,但不对“ .a”执行,如何在bazel中编写它?

以下BUILD.bazel文件不起作用:

cc_library(
    name = "foo",
    srcs = ["foo.c"],
)

genrule(
    name = "readelf_foo",
    srcs = ["libfoo.so"],
    outs = ["readelf_foo.txt"],
    cmd = "readelf -a $(SRCS) > $@",
)

错误是“缺少输入文件'//:libfoo.so'”。

将genrule的srcs属性更改为“:foo”会将“ .a”和“ .so”文件都传递给readelf,这不是我所需要的。

是否可以指定要传递给genrule的“:foo”输出?

1 个答案:

答案 0 :(得分:2)

cc_library产生多个输出,这些输出由输出组分隔。如果只想获取.so输出,则可以将filegroupdynamic_library输出组一起使用。

所以,这应该起作用:

cc_library(
    name = "foo",
    srcs = ["foo.c"],
)


filegroup(
    name='libfoo',
    srcs=[':foo'],
    output_group = 'dynamic_library'
)

genrule(
    name = "readelf_foo",
    srcs = [":libfoo"],
    outs = ["readelf_foo.txt"],
    cmd = "readelf -a $(SRCS) > $@",
)