Вот Makefile:
all: build/program1 build/program2
build/program1: build
touch $@
build/program2:
touch $@
build:
mkdir $@
Запускаем:
$ make
mkdir build
touch build/program1
touch build/program2
$ make
touch build/program1
$ make
make: Nothing to be done for `all'.
Спрашивается, почему при втором запуске он делает то, что уже было сделано?
P.S. Если перенести зависимость build в all, то всё работает правильно. Это выглядит карсивее и правильнее. Но теоретически, приведённое содержимое Makefile'а тоже должно работать.