我有以下代码段,将文件 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()
如果此副本成功,我希望测序能够正常工作
答案 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
路径)
这完全是预期的行为,因为您不希望在构建时修改源树。