waf - 如何使用自定义任务创建的静态库?

标签 waf

我想使用 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 该任务创建了一个静态库,以便我可以在 use 关键字中使用“metis”:

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

最佳答案

为了最终解决这个问题,我创建了一个on link_task,它基本上什么也不做(类似于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",
    )

关于waf - 如何使用自定义任务创建的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987156/

相关文章:

python - 告诉妻子等待任务完成后再开始下一个任务

c++ - waf 在构建时指定库,但在配置时获取全名

module - 使用 waf 构建 fortran 库,安装 .mod 文件

python - 确定处理器架构

migration - 有没有工具可以帮助从 make 迁移到 waf?

translation - waf - 更新并生成翻译 pot 文件

c++ - 使用 Waf 编译时无法正确链接库

node.js - 如何使用调试符号制作node-waf构建二进制文件?

c++ - 通过使用特定于平台的项目文件或使用项目生成器来构建自动化?