【问题标题】:waf multi-step build - target pathwaf 多步构建 - 目标路径
【发布时间】:2013-06-28 17:49:48
【问题描述】:

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

我希望能够获得生成的二进制文件的路径。这是我正在尝试的 sn-p:

    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

P.S 这可能看起来相当琐碎,但我来自make 背景,并且是新手 waf

谢谢。

--编辑--

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

【问题讨论】:

    标签: python waf


    【解决方案1】:

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

    更新#1

    应该让您继续前进的精简内容,尤其是构建目标的派生,还请务必查看包含大量示例的 waf book

    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'
    

    【讨论】:

    • 你的意思是,有一个名为build_target 的内置变量指向构建目录?
    • 实际上,当您从上下文conf.setenv('debug', env=conf.env.derive()) 派生它时定义构建目标(虽然不确定如何将其设置为现有上下文,可能直接通过conf.ENV.* 变量
    • 我还是没有得到整体解决方案:(
    • 在什么阶段需要路径,配置还是构建?到目前为止,您尝试了什么?
    • 在构建阶段,我想获取二进制文件的abs路径,以便在下一组规则中使用。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多