3

在我们的一个项目中,我需要构建一个库,使用waf. 该库有多个步骤,例如构建二进制文件,然后执行二进制文件以生成更多文件,这些文件将包含在进一步的构建中。要运行二进制文件(在中间步骤中生成),我需要它的路径 - 作为字符串,以便我可以为二进制文件添加前缀。从 Waf 书中,我看到了一个例子,以及一些对bld.path.find_dir()和的引用bld.path.parent.find_dir()。但是这些函数不会将路径作为字符串返回。并且,bld.path.abspath()将源路径作为字符串返回。

我希望能够获得生成的二进制文件的路径。这是我正在尝试的一个片段:

    bld.program(
                source              =       my_sources,
                target              =       'my_binary', # <-- path to this
                includes            =       my_includes,
                cflags              =       my_cflags,
                linkflags           =       my_ldflags
            )
    bld.add_group()
    # use the above generated binary file

PS这可能看起来相当微不足道,但我来自make背景,而且是新手 waf

谢谢。

- 编辑 -

我可以在my_binary这里构建,但我想获取它的绝对路径,并在进一步的步骤中引用它

4

1 回答 1

2

build/${build_target}/${your_binary}- 除非你覆盖一些默认值

更新#1

一个应该让你继续前进的精简的东西,特别是构建目标的派生,也一定要查看包含大量示例的waf 书。

def configure(ctx):
    ctx.load(...)
    ctx.env.appname = APPNAME
    ctx.env.version = VERSION

    ctx.define(...)

    ctx.check_cc(...)


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

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


def build(bld):
            ### subdirs :) under build are usually related to build variant or command
            print (">>>>> "+bld.cmd)
            print (">>>>> "+bld.variant)
        bin = bld.program(...)



from waflib.Build import BuildContext

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

class debug(BuildContext):
      cmd = 'debug'
      variant = 'debug'
于 2013-07-02T10:56:48.917 回答