waf命令waf build显示编译器错误(如果有),而waf debugwaf release不会也总是失败,使用以下wscript文件(或者wscript文件可能有其他一些我目前不知道的缺点):

APPNAME = 'waftest'
VERSION = '0.0.1'
def configure(ctx):
    ctx.load('compiler_c')
    ctx.define('VERSION', VERSION)
    ctx.define('GETTEXT_PACKAGE', APPNAME)

    ctx.check_cfg(atleast_pkgconfig_version='0.1.1')
    ctx.check_cfg(package='glib-2.0', uselib_store='GLIB', args=['--cflags', '--libs'], mandatory=True)
    ctx.check_cfg(package='gobject-2.0', uselib_store='GOBJECT', args=['--cflags', '--libs'], mandatory=True)
    ctx.check_cfg(package='gtk+-3.0', uselib_store='GTK3', args=['--cflags', '--libs'], mandatory=True)
    ctx.check_cfg(package='libxml-2.0', uselib_store='XML', args=['--cflags', '--libs'], mandatory=True)

    ctx.check_large_file(mandatory=False)
    ctx.check_endianness(mandatory=False)
    ctx.check_inline(mandatory=False)

    ctx.setenv('debug')
    ctx.env.CFLAGS = ['-g', '-Wall']
    ctx.define('DEBUG',1)

    ctx.setenv('release')
    ctx.env.CFLAGS = ['-O2', '-Wall']
    ctx.define('RELEASE',1)




def pre(ctx):
    print ('Building [[[' + ctx.variant + ']]] ...')


def post(ctx):
    print ('Building is complete.')

def build(ctx):
    ctx.add_pre_fun(pre)
    ctx.add_post_fun(post)

#   if not ctx.variant:
#       ctx.fatal('Do "waf debug" or "waf release"')

    exe = ctx.program(
        features = ['c', 'cprogram'],
        target = APPNAME+'.bin',
        source = ctx.path.ant_glob(['src/*.c']),
        includes = ['src/'],
        export_includes = ['src/'],
        uselib = 'GOBJECT GLIB GTK3 XML'
    )
#   for item in exe.includes:
#       print(item)



from waflib.Build import BuildContext

class release(BuildContext):
    cmd = 'release'
    variant = 'release'

class debug(BuildContext):
    cmd = 'debug'
    variant = 'debug'

waf debug引起的错误:
Build failed
 -> task in 'waftest.bin' failed (exit status -1):
    {task 46697488: c qqq.c -> qqq.c.1.o}
[useless filepaths]

我看了一下waf演示,阅读了wafbook at section 6.2.2但是那些没有为我提供有价值的信息来解决这个问题。
怎么了,我该怎么解决?

最佳答案

您至少需要执行以下操作:

def configure(ctx):
  ...
  ctx.setenv('debug')
  ctx.load('compiler_c')
  ...

因为cfg.setenv函数重置了以前的整个环境。如果要保存以前的环境,可以执行cfg.setenv('debug', env=cfg.env.derive())
另外,您不需要显式指定features = ['c', 'cprogram'],因为当您调用bld.program(...)时,它是多余的。
请不要忘记在修改wscript文件后重新配置。

关于c - WAF-构建工作,自定义构建目标失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10064186/

10-11 18:33