как попросить bazel указать мне путь к встроенному артефакту?

#bazel

#bazel

Вопрос:

У меня есть (например) cc_binary правило, которое создает исполняемый файл. Очевидно, что он встроен в кэш где-то вроде $HOME/.cache/.bazel/............/k8-fastbuild/bin/...../here-is-my-exe .

Как мне получить этот путь из bazel, из командной строки bash? Я просматривал query семейство подкоманд bazel, но не обнаружил подходящей функции. (На самом деле, я действительно не знаю, что я делаю, когда дело доходит до запросов bazel.)

Редактировать:

Я нашел, bazel aquery 'outputs(".*exe-name-here", bazel-target-here)' который, если я выполняю поиск по grep Output: , выдает мне путь, начинающийся с bazel-out . Это нормально, за исключением того, что мне действительно очень хотелось бы указать абсолютный путь или хотя бы один, начинающийся с .cache , чтобы у него были сгенерированные магией имена каталогов.

(Например, как /home/david/.cache/bazel/_bazel_david/c40902ece5403d82118f5676fd37fdb6/execroot/tracklet_linker/bazel-out/... )

Комментарии:

1. Что вы пытаетесь сделать со встроенным исполняемым файлом? Если вы хотите запустить его, вы можете использовать bazel run //target — args

2. ах, спасибо @JamesSharpe, я этого не знал! Это решает некоторые варианты использования, но я хотел бы также иметь способ получить путь, как указано, чтобы я мог позже запускать скрипты за пределами bazel, которые фактически могут напрямую обращаться к файлу по его полному пути.

3. Полная структура вывода задокументирована здесь: docs.bazel.build/versions/master/output_directories.html Вы можете запустить bazel info output_base, чтобы найти базовый каталог для выходных данных сборки, тогда двоичные файлы относятся к execroot; точный путь зависит от структуры сборки и переданных флагов конфигурации

4. У вас также есть удобная символическая ссылка bazel-bin, которая является базовым каталогом для последней завершенной сборки. Затем вы можете запустить readlink для этого, чтобы найти полный путь.

5. Еще один приятный трюк заключается в bazel run --run_under="echo" //your/target:binary