考虑使用makefile,它可以使用文件中列出的生成行生成一些文件。例如,文件001使用第一行,002使用第二行等
这个文件可以改变(它有自己的依赖,但这不会改变)。 如果此文件中的某些行已更改,则应重新生成相应的文件。但其他文件不应该。
我找到的解决方案是这样的:对于每个文件都有一个标志文件,其内容正在生成它上次生成的行。在使用生成行重新生成文件后,我检查所有这个文件,如果行改变则删除它们。因此,将删除依赖于已删除文件的文件,而其他文件则不会。但如果使用msys-make,这种方法效果会太慢。
你能否提出任何其他解决方案,不需要对文件系统和可执行文件进行多次额外调用。
答案 0 :(得分:0)
如果我理解你的描述正确,那么你所描述的是一个Makefile,它依赖于另一个功能上是Makefile的文件,但由于未知原因使用不同的格式。
将该文件转换为Makefile格式,并将include转换为原始Makefile。 (如果您使用的是GNU Make。)
答案 1 :(得分:0)
我们有类似于您的问题。我们有xml文件,比如foobar.xml
,其中包含foobar.out
<files>
<file>a</file>
<file>b</file>
<file>c</file>
</files>
我们决定坚持这个简单的布局,所以我们不需要解析xml。我们使用makepp(因为我们厌倦了gmake而没有注意到更改命令之类的依赖关系)。这给了我们内置的&sed
命令(表达式实际上是Perl编程,但正如你所看到的,你不需要深入研究它)。以下是我们对三种线路的三个简单替换所做的事情:
%.d: %.xml
&sed 's!<files>!$(stem).out: \\! || s!<file>(.+)</file>!$$1 \\! || s!</files>!!' \
$(input) -o $(output)
include foobar.d
这会产生foobar.d
,然后我们将其包括在内:
foobar.out: \
a \
b \
c \
Stackoverflow在此处吞下最后一个空行,这样可以避免担心尾随反斜杠。