#python #scons
#python #scons
Вопрос:
У меня есть простое, но неочевидное требование к процессу сборки на SCONS.
Мне нужно ввести следующую команду:
scons release [version]
Ожидаемые результаты
Что это должно сделать, так это:
- Активируйте цель с именем release.
- Захватите параметр, переданный вскоре после параметра release.
- Как часть цели, выполните функцию. Если параметр, переданный после таргетированного выпуска, является допустимым, вызовите другой таргетированный.
- Если это недопустимо, прервите рабочий процесс и покажите сообщение об ошибке.
Проблема
Я понятия не имею, как это настроить
Моя текущая гипотеза была бы:
- Создайте пользовательский конструктор с двумя действиями.
- Первым действием должна быть функция python, которая каким-то образом сможет остановить процесс, если его логика так решит.
- Второе действие должно вызывать конструктор по умолчанию, потому что, если первое действие решит, что все в порядке, следует выполнить конструктор по умолчанию.
- Создайте цель, указывающую на этот пользовательский конструктор под названием release.
Что мне нужно сделать, так это создать рабочий процесс, в котором некоторая логика выполняется как часть цели и решает, следует или не следует выполнять другую.
Но я не знаю, выполнимо ли это так, как я думаю, и мне не хватает некоторых знаний, которые я не знаю, где получить:
- Цель «release» не является входным файлом. Вместо этого это триггер для выполнения рабочего процесса, состоящего из разных действий. Как мне сообщить SCONS, что параметр «release» не является файлом?
- Как мне получить следующий параметр, введенный вскоре после параметра «release»? Это номер выпуска, который должен использоваться целью «выпуска» для проверки материала. Pseldocode будет:
def releaseTarget(wantedRelease):
if wantedTarget == "":
interruptHere()
- Как мне прервать рабочий процесс, чтобы предотвратить выполнение следующего действия?
- Как мне связать действие по умолчанию в качестве следующего действия в рабочем процессе?
Я хотел бы получить несколько указаний на то, с чего мне следует начать поиск такой функциональности в scons.
Ответ №1:
Способ SCons сделать это — использовать переменные. Это приведет к вызову как:
scons release VERSION=1.2.3
Переменные описаны в документах SCons здесь:
Для release
этого вы бы использовали Alias
документы здесь
Если вы собираетесь делать что-то сверх тривиального с SCons, вероятно, стоит внимательно прочитать руководство пользователя и справочную страницу.
Кроме того, пожалуйста, присоединяйтесь к нам на нашем сервере discord за помощью, или в списке рассылки пользователей, или подробности канала IRC здесь