Делайте работы, сравнивая временные метки файлов, которые существуют на вашем компьютере. Он не поддерживает внутреннюю базу данных о том, какие правила были выполнены: он сравнивает временные метки необходимых файлов с временными метками целевых файлов.
Если вы пишете этот make-файл с использованием touch
, вы создаете цели в виде файлов на локальном диске, поэтому make может видеть, какие правила были выполнены, а какие - нет.
В вашем "реальном" примере вы не создаете никаких файлов (ваши правила не делают файлы с именами pgdynamic_tool
, pgdynamic_current
, ec.), И поэтому make не знает, когда эти правила выполнялись в последний раз.
Если вы хотите, чтобы make пропустил уже запущенные правила, вам нужно создавать файлы с этими именами на диске, когда они запускаются, чтобы make знал об этом. Для этого вы можете использовать touch $@
.
ETA Вы хотите что-то вроде этого:
pgdynamic_setup:
cd $(PGDYNAMICDIR); . /opt/Modules/init/sh; module load <tool_name>; totem2 -lmwait $(PGDYNAMIC_APACHE_LN) $(BATCH_NOBATCH) dynamic_setup.tcl | tee -i ./logs/$@.log
touch $@