たとえば、 patch.txt が存在していた場合だけ、patchを適用したい。存在していなければ何もしない そんな作業をする Makefile を書くには if を使えばよい。
patch := patch.txt
patch_txt_exists := $(shell find -name $(patch))
define message
@echo "message: patch.txt does not exist"
endef
define doPatch
patch < patch.txt
endef
.PHONY : chkPatch
chkPatch:
@echo $(path_txt_exists)
$(if $(patch_txt_exists) ,$(doPatch),$(message))
ポイントは if の以下の部分
$(if $(patch_txt_exists) ,$(doPatch),$(message))
Make の if は $(if 条件,実行1,実行2) のようになっていて、条件部分の結果により、実行1 または 2が実行される...そんな振る舞い。 $(patch_txt_exists) には、find -name patch.txt した結果が入っているので、存在していれば空ではないため、$(doPatch)が実行される。