2013-06-28 47 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