1

次の wscript ファイルを使用すると、 waf コマンドwaf buildはコンパイラ エラーを表示します (存在する場合waf debug) waf release

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のデモを見て、セクション6.2.2のwafbookを読みましたが、この問題を解決するための貴重な情報を提供してくれませんでした。

何が問題なのですか? どうすれば修正できますか?

4

1 に答える 1

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(...)

PS wscriptファイルを変更した後、再構成することを忘れないでください。

于 2012-04-08T17:05:44.883 に答える