SCons шаг сборки вручную - PullRequest
       6

SCons шаг сборки вручную

1 голос
/ 18 августа 2011

Можно ли заставить SCons напоминать мне выполнить шаг вручную, используя отслеживание зависимостей?

Моя сборка использует вывод .swc из .fla, чего нельзя сделать с помощью командыline.

Я пробовал что-то вроде:

env.Command(target, sources + SHARED_SOURCES,
            Action(lambda target, source, env: 1, "Out of date: $TARGET"))

Но с этим методом мне нужно использовать Decider ('make') или я получаю:

$ scons --debug=explain
scons: rebuilding `view_bin\RoleplaySkin.swc' because `view_src\RoleplaySkin.fla' changed
Out of date: view_bin\RoleplaySkin.swc
scons: *** [view_bin\RoleplaySkin.swc] Error 1

И, что более важно, SCons никогда не осознает, что его кеш устарел, поэтому любое изменение в Среде или источниках, поскольку оно записало подпись в .sconsign.dblite, означает, что оно всегда будет пытаться восстановить (и, следовательно, всегда терпит неудачу).

Ответы [ 2 ]

0 голосов
/ 09 апреля 2013

Как насчет создания вашего собственного конструктора RemindMe, который напоминает вам и не может построить цель?

Это будет выглядеть примерно так:

def remind_me(target, source, env):
  os.remove(target.abspath) #we do not build, we destroy
  print ("This is a friendly reminder, your $SOURCE is out of date, run manual build step")
  return None

reminder = Builder(action = remind_me,
                   suffix = '.swc',
                   src_suffix = '.fla')
env = Environment(BUILDERS = {'RemindMe' : reminder})

#Run builder like this   
swc_file = env.RemindMe('some_fla_file')
final_target = env.BuildWithSWC(some_other_target,swc_file)

Это, однако, только теория, яникогда не пытался на самом деле удалить цель вместо ее создания.Возможно, стоит попробовать хотя бы.

0 голосов
/ 01 декабря 2011

Как насчет использования метода Precious для защиты вывода * .swc перед его преобразованием в * .fla?

...