我有一个makefile,它有多个目标,用于输出不同格式的数据,例如: make html
,make pdf
,make 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
步骤?
答案 0 :(得分:8)
不幸的是,你必须为每一个写一个不同的规则。但您可以使用static pattern rule:
使其更简单html pdf txt: %: real-%
do-post-build-stuff
real-html: data.dat
generate-html data.dat
real-pdf: data.dat
generate-pdf data.dat
real-txt: data.dat
generate-txt data.dat
这会创建依赖于html
版本的目标pdf
,txt
和real-
。 real-
版本执行实际工作,然后在完成后,构建后的内容将作为基本目标(html
,pdf
和{{1}中的配方完成})。
这个规则只是一个简写,所以你不必全部写出来;结果是一样的:
txt