Базель получает расположение внешней зависимости как аргумент командной строки для py_binary
Мне нужен путь к внешней (или внутренней) зависимости, чтобы передать его в качестве аргумента функции внутри. Нам нужно расположение папки, а не конкретные файлы. Также иногда нам нужен путь к папке, в которой находится общая библиотека, созданнаяcc_library
.
Файл Python
import cppyy
cppyy.add_include_path('path/to/external/dependency/1')
cppyy.add_library_path('path/to/another/external/dependency/2')
cppyy.add_include_path('path/to/another/internal/dependency')
cppyy.include('file/in/external/dependency')
BUILD файл
py_binary(
name = "sample",
srcs = ["sample.py"],
deps = [
"@cppyy_archive//:cppyy",
],
data = [
"@external-dependency//location:target",
"//internal-dependency/location:target2"
]
)
1 ответ
Из https://docs.bazel.build/versions/master/external.html:
Вы можете увидеть внешний каталог, запустив:
ls $(bazel info output_base)/external
Как пути в external
на самом деле выглядит действительно зависит от правила, используемого для архива. Например, если он объявлен с использованиемhttp_file
в WORKSPACE
файл:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
http_file(
name = "fenix",
urls = ["https://github.com/mozilla-mobile/fenix/archive/v76.0.0-beta.2.tar.gz"],
sha256 = "94050c664e5ec5b66cd2ca9f6a8b898987ab63d9602090533217df1a3f2dc5a9"
)
Вы обнаружите, что v76.0.0-beta.2.tar.gz
файл как external/fenix/file/downloaded
:
user@host:~$ file $(bazel info output_base)/external/fenix/file/downloaded
/home/user/.cache/bazel/_bazel_user/761044447e04744e746cd54d0b4b5056/external/fenix/file/downloaded: gzip compressed data, from Unix, original size modulo 2^32 15759360