Как установить команду как зависимость в ваф

У меня есть правило 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 автоматически управляет исходным деревом против дерева сборки.

Другие вопросы по тегам