2012-08-16 68 views
2

我想用waf来触发一个makefile来构建其他库。为此,我创建了以下任务:如何使用由自定义任务创建的静态库?

def build(bld): 
    def run(self): 
     bld_dir = self.generator.bld.path.get_bld() 
     src_dir = self.inputs[0].parent 
     tgt = self.outputs[0] 
     tgt_dir = bld_dir.make_node(os.path.splitext(tgt.name)[0]) 
     cmd = 'BUILDDIR="{tgt_dir}" make config gdb=1 debug=1 cc={cc} && BUILDDIR=" {tgt_dir}" make'.format(
     tgt_dir = tgt_dir.abspath(), 
     cc = self.env.get_flat("CC")) 
     self.exec_command(cmd, cwd=src_dir.abspath()) 
     return self.exec_command(['cp', lib.abspath(), tgt.abspath()], 
           cwd=tgt_dir.abspath()) 

    bld(
      rule = run, 
      source = "Makefile", 
      target = 'metis', 
    ) 

我怎么能告诉WAF的任务创建一个静态库,这样我就可以在使用关键字用“墨提斯”:

bld(
      features = "cxx cxxprogramm" 
      source = "main.cpp", 
      target = 'main', 
      use = 'metis' 
    )  

回答

4

到最后解决我创建了一个关于link_task的问题,即basicly不notthing(在ccroot.py类似fake_lib):

from waflib.TaskGen import feature, after_method 
from waflib.Tools.ccroot import stlink_task 

class custom_stlib(stlink_task): 
    """ Dummy link task """ 
    pass 

@feature("custom_stlib") 
def custom_lib(self): 
    self.env['custom_stlib_PATTERN'] = 'lib%s.a' 
    self.link_task = self.create_task('custom_stlib', []) 
    self.link_task.add_target(self.target) 


def build(bld): 
    # ... 
    bld(
      features = "cxx custom_stlib", 
      target = 'metis', 
      after = "metis_bld", 
    ) 
+0

我希望我能做到!+10这就是我一直在寻找!谢谢。 – vyom 2013-07-09 07:01:43