Bazel genrule构建时如何将cc_binary的runfiles一同打包为zip
解决方案
你原有配置的问题在于仅将二进制目标本身加入了构建依赖,Bazel默认不会主动构建并传递runfiles目录到genrule的执行上下文,因此打包时只会包含二进制文件本身。
修改方案
直接在genrule中显式声明对runfiles隐式目标的依赖即可,修改后的规则如下:
genrule( name = "zip_binary", srcs = [ ":binary", # 依赖Bazel自动生成的runfiles隐式目标,触发runfiles目录的构建 ":binary.runfiles", ], outs = [ "binary.zip", ], # 同时打包二进制文件和对应的runfiles目录 cmd = "zip -r $(OUTS) $(locations :binary) $(locations :binary.runfiles)", )
注意事项
- 确保你的
cc_binary规则没有配置enable_runfiles = False,该参数会关闭runfiles目录的生成功能 - 最终生成的zip包解压后目录结构和Bazel运行时的目录结构完全一致,直接执行解压后的二进制文件即可正常加载所有关联的runfiles资源
内容的提问来源于stack exchange,提问作者Dig-Doug
相关产品推荐
相关产品推荐

