用pkg_tar打包Bazel中的所有头文件来发布库最简单的方法是什么?

问题描述 投票:0回答:1

我是 Bazel 的新手,但我想向其他人发布一个带有标头和共享库的库。

我的代码树看起来像这样(但有更多子目录):

  • 特色1
    • feature1.hpp
    • 功能1.cpp
    • 建造
  • 特征2
    • feature2.hpp
    • feature2.cpp
    • 建造
  • 特征3
    • feature3.hpp
    • feature3.cpp
    • 建造
  • 建造

我想在根目录

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”的规则?

header shared-libraries bazel
1个回答
0
投票

答案在一定程度上取决于您的

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 = ".",
)

生成的存档看起来与第一个示例中的相同。

© www.soinside.com 2019 - 2024. All rights reserved.