Могу ли я получить ошибку, если моя цель Bazel генерирует файлы, которые не указаны в его выходах?

Внутри .bzl файл,
Я указываю программу для генерации некоторого кода. Это выглядит примерно так:

def generate_code():
    native.genrule(
        name = "foo",
        outs = ["file.hpp"],
        tools = ["//path/to:tool"],
        cmd = $(location path/to:tool) $(@D)
    )

Это отлично работает,
Однако проблема в том, что инструмент может генерировать больше файлов, чем указано в outs,
Я пытаюсь найти способ, чтобы bazel остановил сборку, если было сгенерировано больше файлов, чем указано, или чтобы все выходы автоматически генерировались.

1 ответ

Я не знаю обобщенного способа вывода ошибки Bazel, если были сгенерированы дополнительные, неожиданные файлы.

Одна вещь, которую я мог бы порекомендовать, - это обернуть ваш инструмент в другой инструмент, который проверяет выходные файлы в целевом каталоге и возвращает успех, только если не было сгенерировано неожиданных файлов.

Что касается обобщенного решения, которое намеренно включает в себя все файлы в выходном каталоге, рассмотрите возможность использования actions.declare_directory и создания правила skylark вместо использования native.genrule,

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