Makefile规则,它不生成文件,但检查依赖性

时间:2012-02-22 22:26:19

标签: makefile gnu-make

如何编写一个不在Makefile中生成目标文件的中间规则,以便正确检查依赖关系?

所以我有这样的事情:

install_script: xxx.sql
     psql -f $?

dump.txt: install_script
     psql -c 'select * from xxx;' > $@

我想确保install_script仅在make dump.txt时才运行,当且仅当xxx.sql被修改时。

2 个答案:

答案 0 :(得分:1)

AFAIK,最简单的方法是使用虚拟中间文件:

.xxx.sql.timestamp: xxx.sql
    psql -f $?
    @touch $@

dump.txt: .xxx.sql.timestamp
    psql -c 'select * from xxx;' > $@

如果您想无条件地强制转储查询结果(即使所有内容都是最新的),请添加.PHONY目标:

.PHONY : dump.txt

答案 1 :(得分:0)

您可能正在寻找makefile中的phony targets。 所以看起来应该是这样的:

.PHONY: dump.txt
dump.txt: install_script