Я не нашел идеального способа сделать это. Однако я нашел решение, соответствующее моим потребностям.
Вместо того, чтобы начинать с одного исходного файла и пытаться выяснить, какие файлы заменить, я перебрал файлы, которые, как я знал, могут быть включены, заменив «включенные» экземпляры их содержимым файла.
Что-то вроде:
<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>