我试图找出如何将整个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
要求: 我不能用shell别名来做这件事;这必须在wscript和python中;
我已经检查了https://waf.io,但无法找到办法调用waf configure :(
答案 0 :(得分: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 :(得分:0)
不是最优雅的解决方案,但我只是将waf部署过程封装到功能部署中:
def deploy(bld):
import os
os.system('waf distclean configure build_docs custom_func')
答案 2 :(得分:0)
(我知道这个问题已经过时;但是,这仍然是此问题的主要建议之一。)
不幸的是,您无法使用'distclean'实现此操作,因为此命令还会删除./waf
下载的本地waflib。
(注意:我对此并不完全确定; waf的威力每天都令我惊讶)
但是,您可以进行简单的“清洁”操作:
def deploy(ctx):
from waflib import Build
cctx = Build.CleanContext()
cctx.execute()
这似乎很好。当我们在这里:
如果计划构建多个配置/变体/环境(即“调试”与“发布”),则可以使用以下小工具:
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()