使用 bazel 构建库并将依赖项硬编码到其中

Building libraries with bazel and hardcoding dependencies into them

是否可以将依赖项硬编码到使用 bazel 构建的库中。原因是,如果我构建 somelib,我可以在工作区中使用它,但是一旦我将 lib 复制到其他地方,我就会丢失所有依赖项(bazel 缓存)。 当我想将库部署到系统或安装时出现问题。

some_folder
|
thirdparty
|_WORKSPACE
|_somelib
|    |_src
|         |_ a.c
|         |_ BUILD
|    |_include
|         |_a.h
|_include
   |_ b.h

听起来您想构建一个完全静态链接的库。这可以在 Bazel 中通过使用 cc_binary 构建库并将 linkshared 属性设置为 True 来完成。根据 documentation,您还必须将您的图书馆命名为 libfoo.so 或类似名称。

这里启用静态库的是cc_binarylinkstatic属性行为。当 True 时,这是默认值,所有可以静态链接到二进制文件中的依赖项都将是。请注意 linkstaticcc_library 上的行为不同,请参阅 documentation.

所以,基本上你想要在你的 BUILD 文件中有这样的东西

cc_binary(
    name = "libfoo.so",
    srcs = [...],
    hdrs = [...],
    linkshared = 1,
    #linkstatic = 1 # This is the default, you don't need to add this.
)

祝你好运!