Makefile 多个目标的构建后步骤

Makefile 多个目标的构建后步骤,makefile,post-build-event,Makefile,Post Build Event,我有一个makefile,它有多个输出不同格式数据的目标,例如,生成html,生成pdf,生成txt等。我希望在使用这些选项时运行预构建和后构建步骤。我已经对预构建步骤进行了分类,但不确定如何使后构建步骤正常工作 .PHONY: html pdf txt pre-build post-build pre-build: do-pre-build-stuff post-build: do-post-build-stuff html: data.dat generate-

我有一个makefile,它有多个输出不同格式数据的目标,例如,
生成html
生成pdf
生成txt
等。我希望在使用这些选项时运行预构建和后构建步骤。我已经对预构建步骤进行了分类,但不确定如何使后构建步骤正常工作

.PHONY: html pdf txt pre-build post-build

pre-build:
    do-pre-build-stuff

post-build:
    do-post-build-stuff

html: data.dat
    generate-html data.dat

pdf: data.dat
    generate-pdf data.dat

txt: data.dat
    generate-txt data.dat

data.dat: pre-build
    generate-some-data > data.dat

如何让
post build
步骤在每个目标之后运行?

不幸的是,您必须为每个目标编写不同的规则。但您可以通过以下方法使其更简单:

这将创建目标
html
pdf
txt
,这取决于
real-
版本。
real-
版本执行实际工作,然后在完成后,构建后的内容作为基本目标(
html
pdf
,和
txt
)中的配方完成

这条规则只是一个速记,所以你不必把它全部写出来;结果是相同的:

html: real-html
        do-post-build-stuff

pdf: real-pdf
        do-post-build-stuff

txt: real-txt
        do-post-build-stuff

这看起来很有希望,我马上就去试试。你能解释一下第一行发生了什么吗?我添加了一个指向make文档的指针,描述了静态模式规则和一些信息。为什么
post-build stuff
不能成为它自己的食谱,并在满足先决条件后调用?它将如何“调用”?规则不是功能。在完成所有先决条件后(如果需要更新目标),将调用规则的配方。在这里,他们希望运行
makepdf
并只构建pdf,然后也
进行后期构建。
html: real-html
        do-post-build-stuff

pdf: real-pdf
        do-post-build-stuff

txt: real-txt
        do-post-build-stuff