用动态内容替换文件中的正则表达式匹配项

时间:2012-02-07 18:34:11

标签: ant

我有一个看起来像这样的文件:

// run script Y
#include ./relativePath/to/script.y

// run script Z
#include ./relativePath/to/script/z.z

// etc.

我想要ANT做的是,取这个文件并将所有包含替换为#include'指令'指向的文件的实际内容,相对于文件本身。我正在寻找replaceregexp但并没有获得太多的快乐。

有人能指出我的方向吗?

TIA

2 个答案:

答案 0 :(得分:1)

我没有找到完美的方法来做到这一点。然而,我确实找到了符合我需求的解决方案。

不是从单个源文件开始并试图找出要替换的文件,而是循环查看我知道可能包含的文件,用文件内容替换它们的“包含”实例。

类似的东西:

<target name="fubar">
    ...

    <foreach target="injectFile" inheritall="true" param="include.file">
        <fileset dir="${src.dir}" casesensitive="yes" />
    </foreach>
</target>

<target name="injectFile">
    ... code that works out relative path of include file here ...

    <loadfile property="include.file.content" srcFile="${include.file}" />

    <replace file  = "${build.file}"
             token = "#include ${include.file.relative.path}"
             value = "${include.file.content}" />
</target>

答案 1 :(得分:0)

您的语法非常接近C预处理器。它是将文件名放在引号中的解决方案,例如:

#include "./relativePath/to/script.y"

用于在cpp中提供文件:

cpp -o output inputfile