我想将“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) > $@",
)
Run Code Online (Sandbox Code Playgroud)
错误是“缺少输入文件'//:libfoo.so'”。
将 genrule 的 srcs 属性更改为“:foo”会将“.a”和“.so”文件传递给 readelf,这不是我需要的。
有没有办法指定“:foo”的哪个输出传递给genrule?
cc_library产生多个输出,这些输出由输出组分隔。如果您只想获得 .so 输出,可以filegroup与dynamic_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) > $@",
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2044 次 |
| 最近记录: |