Bazel 将第三方库的一部分构建为带有标头的静态库

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

我正在尝试构建第三方 C++ 库的子集。我想要一个静态库(可能是

.lo
)作为输出,以及指定目标的标头。在此阶段我不会添加任何我自己的源文件。我该怎么做?

我将使用它来编译带有一些包装器代码的单个动态(

.so
)库。

我正在构建的库是 XLA,但欢迎使用通用解决方案。我对此尝试了各种迭代

cc_library(
    name = "my_xla",
    srcs = [],
    deps = [
        "@xla//xla/client:xla_builder,
        "@com_google_absl//absl/strings:str_format",
        "@tsl//tsl/platform:logging",
        "@tsl//tsl/platform:platform_port",
    ],
    hdrs = [
        "@xla//xla/client:xla_builder",
    ],
    alwayslink = True,
)

并且它构建“成功”,但我没有在我的 bazel-bin 目录中得到

.a
.lo
或标题列表。这是我的
WORKSPACE

local_repository(
  name = "xla",
  path = "xla",
)

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

load("@xla//:workspace4.bzl", "xla_workspace4")
xla_workspace4()

load("@xla//:workspace3.bzl", "xla_workspace3")
xla_workspace3()

load("@xla//:workspace2.bzl", "xla_workspace2")
xla_workspace2()

load("@xla//:workspace1.bzl", "xla_workspace1")
xla_workspace1()

load("@xla//:workspace0.bzl", "xla_workspace0")
xla_workspace0()
c++ bazel xla-compiler
1个回答
0
投票

要使用 Bazel 构建第三方 C++ 库的子集(如 XLA)作为带有标头的静态库,您需要正确定义您的 BUILD 文件并确保包含必要的目标。还, 关于 bazel-bin 目录中缺少 .a 或 .lo 文件Bazel 可能没有实际构建库,因为它由于没有源文件而为空。既然你提到了你想要使用一些 包装器代码编译 动态库 您需要将一些源文件添加到您的 my_xla 目标,即使它们只是空占位符文件。

cc_library(
    name = "my_xla",
    hdrs = glob(["path/to/xla/client/*.h"]),  ### Adjust the path
    srcs = ["path/to/emptyfile.cc"],  ### Replace Placeholder source file
    deps = [
        "@xla//xla/client:xla_builder",
        "@com_google_absl//absl/strings:str_format",
        "@tsl//tsl/platform:logging",
        "@tsl//tsl/platform:platform_port",
    ],
)
© www.soinside.com 2019 - 2024. All rights reserved.