waf命令waf build
显示编译器错误(如果有),而waf debug
或waf 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/