Я хотел бы выполнить команду, которая берет конкретный файл в проекте (строит его по мере необходимости) и отправляет его куда-то извне. Например, это может быть команда, которая загружает веб-страницу или отправляет электронное письмо. Он может даже записывать некоторые дополнительные файлы, такие как журнал, но это не имеет смысла вызывать его.
Другими словами, это действие вызывается наименованием его источника, а не цели - либо потому, что у него нет ощутимой цели, либо оно незначительно, и действие в первую очередь требуется для его побочного эффекта.
Я вижу, что необходимо указать дополнительный аргумент командной строки, например:
% BuildSystem send pizza.box
Команда выше должна быть эквивалентна следующей:
% BuildSystem pizza.box
% send pizza.box
Может ли (и "должен") это быть выполнено с помощью системы сборки shake
?
P.S. Как Даниэль предлагает в ответе , я могу расширить парсер аргументов shake
. Но я не уверен, что это лучшая практика для такого случая. Кажется, он немного расходится с поведением shake
, рассматривая каждый аргумент командной строки как отдельную цель. Это также совершенно новая логика для оператора, так много накладных расходов для такой сложной задачи.
Возможно, было бы более интуитивно запрашивать файл receipt
для каждой отправляемой box
. Например:
% BuildSystem pizza.receipt
- тогда будет эквивалентно:
% BuildSystem pizza.box
% send pizza.box >pizza.receipt
С другой стороны, как я понимаю из официального ответа на вопрос поблизости , у нас не может быть псевдо-цели, такой как pizza.send
, которая фактически не приводит к созданию файла pizza.send
. Поэтому я не уверен, опять же, если это правильный путь.
P.S. 2 Было бы еще лучше, если бы мы могли заменить стандартный «файл существует» верификатора успеха на собственный код. Например, вместо проверки того, что файл pizza.receipt
(который в остальном нам не нужен) действительно был создан, мы можем позвонить клиенту и спросить его, наслаждались ли они обедом. Если мы можем это организовать, то можем вызвать соответствующее правило с помощью «псевдофайла» target pizza.send
. Как правило, артефакты сборки вообще не обязательно должны находиться в локальной файловой системе, поскольку указан код, который может их проверять и извлекать.