Как добавить проект, отличный от Bazel, в качестве цели сборки для текущего проекта Bazel?

Фон: у меня есть библиотека только для заголовков C++, например: mpack mpack использует систему сборки cmake. Однако я хочу использовать некоторые из его функций в своем проекте (my_project), который использует систему сборки bazel.

Я выполнял шаги из https://docs.bazel.build/versions/1.2.0/external.html#non-bazel-projects .

Цель: Попытка включить mpack.hpp в sni_filter.cc

Мои изменения:

а) Добавлен следующий фрагмент в файл WORKSPACE

      new_local_repository(
    name = "mpack-c",
    path = "mpack-c",
    build_file = "BUILD.mpack-c",
)

б) Добавлен BUILD.mpack-c

      cc_library(
    name = "mpack-lib",
    srcs = glob(["**"]),
    visibility = ["//visibility:public"],
)

c) Добавлена ​​цель mpack-lib в BUILD-файл sni_filter.

      envoy_cc_library(
    name = "sni_filter_lib",
    srcs = ["sni_filter.cc"],
    hdrs = ["sni_filter.h"],    
    deps = [       
        "@mpack-c//:mpack-lib",
    ],
)

Когда я пытаюсь запустить сборку bazel, она выдает ошибку:

      ERROR: Error fetching repository: /xoxo/xyz/abc/repo/src/engine/WORKSPACE:28:21: In new_local_repository rule //external:mpack-c the 'build_file' attribute does not specify an existing file (/xoxo/xyz/abc/repo/src/engine/BUILD.mpack-c does not exist)
ERROR: /xoxo/xyz/abc/repo/src/engine/my_proj/sni_filter/BUILD:11:17: //my_proj/sni_filter:sni_filter_lib depends on @mpack-c//:mpack-lib in repository @mpack-c which failed to fetch. no such package '@mpack-c//': In new_local_repository rule //external:mpack-c the 'build_file' attribute does not specify an existing file (/xoxo/xyz/abc/repo/src/engine/BUILD.mpack-c does not exist)

Прикрепил структуру каталога

1 ответ

Путь в new_local_repositoryдолжен быть либо абсолютным, либо относительным для каталога, в котором находится файл. Кроме того, метка в build_fileАтрибут должен быть указан относительно корня рабочей области.

Итак, в вашем WORKSPACEзаменить файл:

      new_local_repository(
    name = "mpack-c",
    path = "mpack-c",
    build_file = "BUILD.mpack-c",
)

с:

      new_local_repository(
    name = "mpack-c",
    path = "mpack",
    build_file = "mpack/BUILD.mpack-c",
)

Для справки см . документацию .

Другие вопросы по тегам