如何在wscript中调用waf configure

时间:2016-10-09 21:24:58

标签: 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

要求: 我不能用shell别名来做这件事;这必须在wscript和python中;

我已经检查了https://waf.io,但无法找到办法调用waf configure :(

3 个答案:

答案 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()