GNU Make > PHONY ターゲット

ターゲット名と同名のファイルが存在した時に
$ ls -l
合計 4
-rw-r--r-- 1 satoshi satoshi 27 2009-09-02 21:57 Makefile
-rw-r--r-- 1 satoshi satoshi 0 2009-09-02 21:57 foo
$ cat Makefile
foo:
        echo "foo"
 というMakefileを実行すると
$ make
make: `foo' は更新済みです
となってしまう。fooはファイル名ではなく、
実際のファイルではない擬似ターゲット名であることを
明示的に宣言するためのものが、.PHONYターゲット
$ cat Makefile
.PHONY: foo

foo:
        echo "foo"
$ ls -l
合計 4
-rw-r--r-- 1 satoshi satoshi 27 2009-09-02 21:57 Makefile
-rw-r--r-- 1 satoshi satoshi 0 2009-09-02 21:57 foo
$ make
echo foo
foo
これで意図した動作になりました。