4

我有以下片段,将文件按原样复制到构建目录:

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 书5.3.3节中的示例中,仍然没有运气!我在这里遗漏了一些明显的东西吗!?

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

bld.add_group()

如果此副本成功,我希望排序将起作用

4

3 回答 3

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。不要指望立竿见影的效果。

于 2017-09-22T21:26:06.387 回答
1

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

如果你想在目标被删除的情况下重新复制,你需要always=True,或者你需要检查是否存在并设置target.sig = None

于 2017-04-27T22:12:21.973 回答
0

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


这完全是意料之中的行为,因为您不想在构建时修改源代码树。

于 2014-11-06T19:59:30.667 回答