1

我有一个src/apps/myapp/myapp程序,我正在构建作为 automake 规则的一部分,它工作正常。

然后我在 Makefile 规则中使用它来生成 HTML 文件,例如:

.src.html: src/apps/myapp/myapp
    src/apps/myapp/myapp --html $< > /tmp/generated && \
        mv /tmp/generated $@

html: data/src/example.html src/apps/myapp/myapp

这是因为它在运行时构建和src/apps/myapp/myapp生成:data/src/example.htmldata/src/example.src

make html

更改时data/src/example.src,它会正确地重新生成data/src/example.html.

问题是,如果src/apps/myapp/myapp发生变化,它不会重新生成data/src/example.html. 此外,该src/apps/myapp/myapp程序是在 HTML 文件之后构建的(即它只使用html目标依赖项而不是.src.html规则依赖项)。

更新:

使用 GNU Make,我可以改变:

.src.html: src/apps/myapp/myapp

到:

%.html : %.src src/apps/myapp/myapp

这按预期工作,但依赖于 GNU make 扩展。我可以以便携的方式做到这一点吗?

4

1 回答 1

1

后缀规则不支持额外的先决条件。根据 POSIX 标准,它们被忽略。

当然,您可以随时声明任何目标/先决条件关系,它们不必在包含配方的规则中声明。

您没有显示任何 HTML 文件列表,但如果您在变量中有一个(例如,$(HTMLFILES)),那么您可以声明:

$(HTMLFILES): src/apps/myapp/myapp

这将起作用(并且是可移植的)。

于 2013-06-09T13:45:45.107 回答