KDOC 669: Makeは前提条件のないターゲットと同じ名前のファイルがあるとレシピを実行しない
この文書のステータス
- 作成
- 2026-10-17 貴島
- レビュー
- 2026-10-17 貴島
概要
Make は、前提条件のないターゲットと同じ名前のファイルがあると、もう作ってあるとみなしてレシピを実行しない。ファイルを作らないターゲットは .PHONY にすると、同じ名前のファイルがあっても実行する。
dir=$(mktemp -d); trap 'rm -rf "$dir"' EXIT; cd "$dir"
touch clean
printf 'clean:\n\t@echo "clean のレシピを実行した"\n' > Makefile
echo "== .PHONY なし"
make clean 2>&1
printf '.PHONY: clean\nclean:\n\t@echo "clean のレシピを実行した"\n' > Makefile
echo "== .PHONY あり"
make clean 2>&1
== .PHONY なし
make: 'clean' is up to date.
== .PHONY あり
clean のレシピを実行した
前提条件があれば、それがファイルより新しいときに作り直す。前提条件がないと比べる相手がないので、ファイルがあるだけで最新とみなされる。
Since it has no prerequisites, clean would always be considered up to date and its recipe would not be executed. To avoid this problem you can explicitly declare the target to be phony by making it a prerequisite of the special target .PHONY …
関連
抽象。
- 比べる相手がないと、存在するだけで最新とみなされて作業が省かれる
関連。
- 対比: KDOC 183: RUN –mount=type=cacheでビルド時にツール側のキャッシュを使える。作業を省くかを、中身の変化で判断する例