我正在尝试构建第三方 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()
要使用 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",
],
)