Как установить команду как зависимость в ваф
У меня есть правило waf, которое не создает файл, поэтому у меня нет цели. Я бы хотел, чтобы другое правило вафля выполнялось строго после первого правила. Ниже приведен надуманный пример ситуации такого типа.
В синтаксисе Make я пытаюсь сделать что-то вроде следующего:
kill_server:
myserver --kill
install_server: kill_server
cp $(SRC)/myserver $(BLD)/myserver
В ваф, я здесь
def install_server(bld):
killer = bld(name='kill_server', rule='myserver --kill')
bld(name='install_server', rule='cp ${SRC} ${TGT}',
source=os.path.join(src, 'myserver'),
target=os.path.join(bld, 'myserver'), deps=[killer])
Очевидно, это не работает, потому что killer
это TaskGen, а не целевой узел. Что я могу положить в deps? Может ли шаг зависеть от другого шага, который не создает цель?
1 ответ
Для генератора задач на основе правил вы можете использовать after
ключевое слово:
def build(bld):
bld(
name = 'kill_server',
rule = 'echo killing ...;sleep 5',
)
bld(
name = 'install_server',
rule = 'cp ${SRC} ${TGT}',
source = 'myserver',
target = 'myserver2',
after = ["kill_server"]
)
Он работает как TG на основе правил, генерирует только одну задачу с именем TG, и after
Ключевое слово используется для задачи.
Другим решением для другого TG является создание выходного файла и использование его в качестве источника для зависимого TG.
Если источник и цель совпадают, используйте waf Node API:
server = bld.path.find_node('myserver')
target_server = server.get_bld()
waf автоматически управляет исходным деревом против дерева сборки.