bazel-如何从构建目标文件打包特定文件(cc_library)

时间:2019-07-11 08:17:24

标签: shared-libraries static-libraries bazel

我是bazel的新手,有一个问题:

我已经这样定义了一个库xxx:

cc_library(
    name = "xxx",
    srcs = glob(["lib/*.c"]),
    hdrs = glob(["include/*.h"]),
    copts = ["-Iinclude -Werror"],
)

使用pkg_tar,我看到它生成了一个目标文件:xxx,其中包含.so和.a:

load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")

pkg_tar(
    name = "libxxx",
    package_dir = "/usr/lib/",
    srcs = [":xxx"],
    mode = "0644",
)

我只想获取静态库.a,我该怎么办,目前,我只找到了以下解决方案:

pkg_tar(
    name = "libxxx-static",
    package_dir = "/usr/lib/",
    srcs = [":xxx"],
    # FIXME
    strip_prefix = "libxxx.so",
    mode = "0644",
)

如何在目标文件中仅获取一个文件?

1 个答案:

答案 0 :(得分:0)

您可以使用cc_library()linkstatic字段

  

linkstatic属性在cc_library()规则上使用时具有不同的含义。对于C ++库,linkstatic = True表示仅允许静态链接,因此不会生成.so。 linkstatic = False不会阻止创建静态库。该属性用于控制动态库的创建。

像这样:

cc_library(
    name = "xxx",
    srcs = glob(["lib/*.c"]),
    hdrs = glob(["include/*.h"]),
    copts = ["-Iinclude -Werror"],
    linkstatic = True,
)