waf将文件从源树复制到构建树

时间:2014-08-20 18:05:50

标签: copy waf sequencing

我有以下代码段,将文件 as-is 复制到build dir:

for m in std_mibs:
    print("Copying", m)
    bld(name       = 'cpstdmib',
        rule       = 'cp -f ${SRC} ${TGT}',
        #source     =  m + '.mib',
        source     =  bld.path.make_node(m + '.mib'), # <-- section 5.3.3 of the waf book
        target     =  bld.path.get_bld().make_node(m + '.mib')
        )

我看到这个规则,虽然命中(从印刷品),副本似乎没有发生! 我还更改了源代码以使用make_node,如waf book的 5.3.3 部分中的示例所示,仍然没有运气!我错过了一些明显的东西!?

另外,我之后有一些规则,依赖于复制的文件,我尝试添加 干预

bld.add_group()

如果此副本成功,我希望测序能够正常工作

3 个答案:

答案 0 :(得分:1)

如果您运行一次规则,则在更新源之前不会再次运行该规则。例如,即使目标被删除也是如此(这可能就是你测试的方式。)

如果要重新复制目标是否已删除,则需要always=True,或者您需要检查是否存在并设置target.sig = None

答案 1 :(得分:1)

两种选择:

  • features="subst"is_copy=True

     bld(features='subst', source='wscript', target='wscript', is_copy=True)
    
  • 像这样的
  • waflib.extras.buildcopy

    from waflib.extras import buildcopy
    #...
    def build(bld):
        bld(features='buildcopy',buildcopy_source=['file'])
    

cp与平台无关。

创建task_gen对象,稍后将成为Task,将在process_sources之前执行。不要指望立竿见影。

答案 2 :(得分:0)

查看您的out目录,会有out/${TGT}(不完全相同,但相对于${TGT}目录的top路径)


这完全是预期的行为,因为您不希望在构建时修改源树。