2015-12-12 6 views
0

Предположим, у меня есть цель A, которая может быть построена только тогда, когда либо B, либо C уже созданы. Здание C намного дороже, чем здание B.несколько приоритетных способов удовлетворения зависимости

Как написать оптимальный файл SConstruct, который удовлетворяет следующим ограничениям, когда я попрошу его построить A.

  1. Если какая-либо B или C присутствует и UpToDate, непосредственно построить A
  2. Если ни B, ни C присутствует и UpToDate, сначала построить B, а затем построить A

Если scons не обеспечивает эта возможность, предоставляет ли какой-либо другой инструмент построения?

+0

Если C всегда намного дороже, чем B, я бы серьезно подумал о том, чтобы никогда не строить C вообще. Сделайте B единственной зависимостью от A, и вы должны делать все правильно, основываясь на вашем описании проблемы, приведенной выше ... – dirkbaechle

+0

Конечно, есть другие очень важные причины для создания C, когда я могу подождать. Я могу начать работать, как только будет построен B. Но я могу только быть уверенным, что моя работа правильная, когда C построен. –

+1

Тогда ваше описание немного вводит в заблуждение, не так ли? Вы нигде не упоминаете, что вам, наконец, нужно построить с помощью «C», чтобы построить правильную версию «A». Помните, что SCons состоит в том, чтобы обеспечить правильные сборки в первую очередь ... Наконец, как должна строиться система, которая должна знать *, когда * точно вы хотите получить свой последний «A» (= использовать C) или когда вы все еще можете начать предварительную работу основанный на некорректном «A» (= использование B)? – dirkbaechle

ответ

0

Вы можете попробовать использовать SideEffect() на строителя для B или C, а также строитель генерировать А.

Не пробовал, но это может сработать.