Базель - как мне упаковать определенный файл из целевых файлов сборки (cc_library) - PullRequest
0 голосов
/ 11 июля 2019

Я новичок в Базеле и у меня есть вопрос:

Я определил библиотеку ххх так:

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 голосов
/ 23 июля 2019

Вы можете использовать linkstatic поле cc_library () ,

Атрибут 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,
)
...