#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')