Как добавить инструмент в переменную среды PATH в правиле Bazel

Учитывая этот файл BUILD для Bazel ниже, как я могу получить абсолютный путь к верхнему уровню группы файлов compiler_files? Я пробовал использовать $(location //X:Y) и его варианты, но получаю просто огромный список файлов с указанием их путей относительно песочницы. Каков идиоматический способ обновления переменной среды PATH в правиле с путем к инструменту, указанному в атрибуте tools?

package(default_visibility = ['//visibility:public'])

filegroup(
    name = "script",
    srcs = ["src/inspect.sh"],
)

genrule(
    name = "inspect",
    srcs = [":script"],
    cmd = """
# Instead of /tmp below I need to refer to the path of one of the tools
# export PATH=/tmp:$$PATH
source $(location :script)
cp output.txt $(RULEDIR)/
""",
    tools = [
        "@emsdk//emscripten_toolchain:compiler_files"
    ],
    outs = ["generated.txt"]
)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обычный трюк для этого — напрямую зависеть от файла в каталоге, в который вы хотите добавить $PATH, а затем ссылаться на имя его каталога в скрипте genrule. Так, например, чтобы добавить местоположение emcc.sh:

genrule(
    name = "inspect",
    srcs = [":script"],
    cmd = """
export PATH=$$(dirname $$(realpath $(location @emsdk//emscripten_toolchain:emcc.sh))):$$PATH
source $(location :script)
cp output.txt $(RULEDIR)/
""",
    tools = [
        "@emsdk//emscripten_toolchain:emcc.sh",
        "@emsdk//emscripten_toolchain:compiler_files",
    ],
    outs = ["generated.txt"]
)

Это почти решение, однако в конце отсутствует скобка, а имя_каталога возвращает не абсолютный путь, а только относительный, который, я думаю, не работает в PATH, верно?

mallwright 25.05.2024 15:13

У меня это работает: export PATH=$$(dirname $$(realpath $(location @emsdk//emscripten_toolchain:emcc.sh))):$$PATH

mallwright 25.05.2024 15:31

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