1

考虑拥有一个 makefile,它可以使用文件中列出的生成行生成一些文件。例如文件 001 使用第一行,002 使用第二行等。

该文件可以更改(它有自己的依赖项,但这并不重要)。如果此文件中的某些行发生更改,则应重新制作相应的文件。但其他文件不应该。

我找到的解决方案是这个:对于每个文件都有标志文件,其内容是上次生成的行。用生成线重新制作文件后,我检查所有这些文件,如果线改变,则将其删除。因此,依赖于已删除文件的文件将被重新制作,而其他文件则不会。但是如果使用 msys-make,这工作太慢了。

您能否建议任何其他解决方案,它不需要对文件系统和可执行文件进行多次额外调用。

4

2 回答 2

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 在这里吞下了最后一个空行,这样就不必担心尾随的反斜杠了。

于 2013-04-16T22:47:47.973 回答
0

如果我正确理解您的描述,那么您所描述的是一个 Makefile,它依赖于另一个功能上是 Makefile 但由于未知原因使用不同格式的文件。

将该文件转换为 Makefile 格式并将其包含到原始 Makefile 中。(如果您使用的是 GNU Make。)

于 2013-04-15T17:39:10.607 回答