Правило Makefile, которое не генерирует файл, но проверяет зависимость - PullRequest
1 голос
/ 23 февраля 2012

Как мне написать промежуточное правило, которое не создает целевой файл в Makefile таким образом, чтобы он правильно проверял зависимость?

Итак, у меня есть что-то вроде этого:

install_script: xxx.sql
     psql -f $?

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

Я хочу убедиться, что install_script запускается только при make dump.txt тогда и только тогда, когда xxx.sql был изменен.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

AFAIK, самый простой способ для вашего случая - использовать фиктивный промежуточный файл:

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

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

И если вы хотите принудительно выполнить дамп результата запроса (даже если все обновлено), добавьте .PHONY target:

.PHONY : dump.txt
0 голосов
/ 23 февраля 2012

Возможно, вы ищете фальшивые цели в make-файле. Так должно выглядеть:

.PHONY: dump.txt
dump.txt: install_script
...