Как поставить логику проверки в зависимость от цели SCONS

#python #scons

#python #scons

Вопрос:

У меня есть простое, но неочевидное требование к процессу сборки на SCONS.

Мне нужно ввести следующую команду:

 scons release [version]
 

Ожидаемые результаты

Что это должно сделать, так это:

  1. Активируйте цель с именем release.
  2. Захватите параметр, переданный вскоре после параметра release.
  3. Как часть цели, выполните функцию. Если параметр, переданный после таргетированного выпуска, является допустимым, вызовите другой таргетированный.
  4. Если это недопустимо, прервите рабочий процесс и покажите сообщение об ошибке.

Проблема

Я понятия не имею, как это настроить

Моя текущая гипотеза была бы:

  1. Создайте пользовательский конструктор с двумя действиями.
  2. Первым действием должна быть функция python, которая каким-то образом сможет остановить процесс, если его логика так решит.
  3. Второе действие должно вызывать конструктор по умолчанию, потому что, если первое действие решит, что все в порядке, следует выполнить конструктор по умолчанию.
  4. Создайте цель, указывающую на этот пользовательский конструктор под названием release.

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

Но я не знаю, выполнимо ли это так, как я думаю, и мне не хватает некоторых знаний, которые я не знаю, где получить:

  1. Цель «release» не является входным файлом. Вместо этого это триггер для выполнения рабочего процесса, состоящего из разных действий. Как мне сообщить SCONS, что параметр «release» не является файлом?
  2. Как мне получить следующий параметр, введенный вскоре после параметра «release»? Это номер выпуска, который должен использоваться целью «выпуска» для проверки материала. Pseldocode будет:
 def releaseTarget(wantedRelease):
  if wantedTarget == "":
    interruptHere()
 
  1. Как мне прервать рабочий процесс, чтобы предотвратить выполнение следующего действия?
  2. Как мне связать действие по умолчанию в качестве следующего действия в рабочем процессе?

Я хотел бы получить несколько указаний на то, с чего мне следует начать поиск такой функциональности в scons.

Ответ №1:

Способ SCons сделать это — использовать переменные. Это приведет к вызову как:

 scons release VERSION=1.2.3
 

Переменные описаны в документах SCons здесь:

Для release этого вы бы использовали Alias документы здесь

Если вы собираетесь делать что-то сверх тривиального с SCons, вероятно, стоит внимательно прочитать руководство пользователя и справочную страницу.

Кроме того, пожалуйста, присоединяйтесь к нам на нашем сервере discord за помощью, или в списке рассылки пользователей, или подробности канала IRC здесь