2013-06-28 46 views
3

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

我希望能够获得生成的二进制文件的路径。下面是我想做一个片段:

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,但我想它的ABS路径,并在进一步的步骤

回答

1

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

更新#1

一个砍下应该让你去的东西,E特别是构建目标的推导,也一定要检查其中包含很多示例的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' 
+0

你的意思是说,有一个内建的变量,称为'build_target',它指向构建目录? – vyom

+0

实际上,当你从上下文'conf.setenv('debug',env = conf.env.derive())'派生它时定义构建目标'(不知道如何将其设置为现有上下文,尽管可能直接通过'conf.ENV。*'变量 – drahnr

+0

'conf.env。*'我的意思是 – drahnr