【问题标题】:Processing changed files in WAF script在 WAF 脚本中处理更改的文件
【发布时间】:2013-04-03 20:16:42
【问题描述】:

是否可以在 wscript 文件中编写 WAF 函数,在构建每个更改的文件时都会调用该函数?

我希望能够做到以下几点:

  1. 通过自定义 Python 函数处理所有输入的.hpp 文件并将它们输出到构建文件夹。如果此类文件已更改,我想对其进行处理并更新其在输出文件夹中的定义。
  2. 通过外部脚本处理所有输入的.hpp文件并将结果输出到构建文件夹。

更新:

解释一下:我希望为每个更改的文件运行一个fun1(file) 函数,该函数将读取文件,对其进行修改并返回修改后的版本,该版本应输出到目标目录。

【问题讨论】:

    标签: python waf


    【解决方案1】:

    只处理修改过的文件是WAF的主要功能之一^^

    要执行你的 python 函数,你可以这样做:

    top = '.'
    out = 'build'
    
    
    def configure(conf):
        pass
    
    def build(bld):
    
        def fun1(input_file):
    
            # whatever
    
            return output_file_content_as_string
    
        def process(task):
    
            for src_node in task.inputs:
    
                src = src_node.abspath()
                tgt = src_node.get_bld()
    
                out = fun1(src)
    
                tgt.write(out)
    
            return 0 # everything ok
    
        bld(
            rule   = process,
            source = ['myfile.hpp', 'myfile2.hpp', ],
        )
    

    这将在 myfile.hpp 等上调用 fun1,并仅在修改后的文件上在构建目录中输出。

    默认情况下,waf 为每个源管理一个签名以检测任何更改,并且仅在签名更改时才处理它...

    【讨论】:

    • 谢谢,但我想在复制之前处理文件 - 假设在其上运行 Python 函数 - 可以吗?
    • 是的。事实上,如果您不使用 is_copy=True 参数,subst 功能正是这样做的。它可以替换源中的某些内容来获取目标。你想对你的文件做什么?顺便说一句,更新您的问题以使其更清晰/更详细,就是这样。
    • 我想用我的自定义 Python 函数处理它(查看问题中的更新)。该函数可以读取文件、解析文件、修改并输出修改后的版本 - 我想为每个修改后的文件执行此操作。
    • 仍然没有答案如何在每个更改的文件上运行我的 python 函数:(
    • 我认为我的建议会做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多