Как вызвать waf configure из wscript

#waf

#waf

Вопрос:

Я пытаюсь выяснить, как инкапсулировать весь процесс развертывания waf в одну функцию waf

Традиционный процесс развертывания waf:

 waf distclean configure build
  

Поместите это в функцию wscript, которая позволяет мне вызывать все три из этих параметров waf:

 waf deploy
  

Функция внутри wscript:

 def deploy(bld):
    """ Performs waf distclean, configure and build
    Args:
        bld: The waf build context object
    """
    #somehow call waf distclean, configure and build
  

требования:
Я не могу сделать это с помощью псевдонима оболочки; это должно быть в wscript и в python;

Я проверил https://waf.io и не могу найти способ вызвать waf configure:(

Ответ №1:

Другим решением является использование опций из waflib :

 def configure(conf):
    print("Hello from configure")

def build(bld):
    print("Hello from build")

def deploy(bld):

    from waflib import Options

    commands_after = Options.commands

    Options.commands = ['distclean', 'configure', 'build']
    Options.commands  = commands_after
  

Комментарии:

1. Правильный способ сделать это. Я добавляю distclean , поскольку OP запросил 3 команды.

Ответ №2:

(Я знаю, что этот вопрос довольно устарел; тем не менее, этот вопрос по-прежнему является одним из главных предложений по этому вопросу.)


К сожалению, вы не можете добиться этого с помощью ‘distclean’, поскольку эта команда также удаляет локальную загрузку ./waf waflib .

(Примечание: я не совсем уверен в этом; мощность waf удивляет меня каждый день)

Тем не менее, вы можете выбрать простой «чистый»:

 def deploy(ctx):
    from waflib import Build
    cctx = Build.CleanContext()
    cctx.execute()
  

Кажется, это работает просто отлично. Пока мы этим занимаемся:

Если вы планируете создавать несколько конфигураций / вариантов / сред (например, Debug vs Release), вы можете использовать этот маленький камень:

 def build_all(ctx):
    from waflib import Build

    deb = Build.BuildContext()
    deb.variant = 'debug' # Assuming, that 'debug' is an environment you set up in configure()
    deb.execute()

    rel = Build.BuildContext()
    rel.variant = 'release' # Analogous assumption as for debug.
    rel.execute()
  

Ответ №3:

не самое элегантное решение, но я просто инкапсулирую процесс развертывания waf в развертывание функции:

 def deploy(bld):
    import os
    os.system('waf distclean configure build_docs custom_func')