我是 Bazel 的新手,但我想向其他人发布一个带有标头和共享库的库。
我的代码树看起来像这样(但有更多子目录):
根
我想在根目录
tar.gz
中打包一个BUILD
文件,并包含lib和include,
cc_binary(
name = "feature_impl",
deps = [
":feature1",
":feature2",
":feature3",
],
)
cc_binary(
name = "feature",
linkshared = True,
deps = [":feature_impl"],
)
filegroup(
name = "headers"
srcs = XXXXXXX
)
pkg_tar(
name = "headers_pkg"
srcs = "headers",
package_dir = "include",
)
pkg_tar(
name = "feature_pkg"
srcs = ":feature",
package_dir = "lib"
)
如何将所有标头与子目录结构打包在一起? 现在我必须在每个子目录的
pkg_tar
中编写一个 BUILD
目标。`
filegroup 是否有类似“sub_glob”的规则?
答案在一定程度上取决于您的
featureX/BUILD
文件中的内容,以及您是否首先拥有它们。
如果子目录中没有
BUILD
文件:
应该足以定义:
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")
filegroup(
name = "headers",
srcs = glob([
"feature*/*.hpp",
]),
)
pkg_tar(
name = "headers_pkg",
srcs = [
":headers",
],
strip_prefix = ".",
)
在 tar 中获得以下结构:
$ tar -tf bazel-bin/headers_pkg.tar
feature1/
feature1/feature1.hpp
feature2/
feature2/feature2.hpp
feature3/
feature3/feature3.hpp
如果您需要子目录中的
BUILD
文件
您可以为每个功能的标题定义
filegroup
:
feature1/BUILD.bazel
:
filegroup(
name = "headers",
srcs = glob(["**/*.hpp"]),
visibility = ["//visibility:public"],
)
然后从所有 3 个文件组创建包:
load("@rules_pkg//pkg:tar.bzl", "pkg_tar")
pkg_tar(
name = "headers_pkg",
srcs = [
"//feature1:headers",
"//feature2:headers",
"//feature3:headers",
],
strip_prefix = ".",
)
生成的存档看起来与第一个示例中的相同。