Причина в том, что make должен отслеживать обратно зависимости, чтобы сделать вас foo
.
Когда вы вводите make foo
, подумайте, что вы просите его сделать файл с именем foo
. Так как foo
не существует (предположение), он пытается выяснить, как сделать foo
. Вы сделали правило подстановки %
может быть любым, и поскольку нет лучшего варианта make, он попытается использовать это правило, чтобы сделать foo
. Чтобы сделать foo
, теперь есть зависимость force
, которую нужно выполнить, прежде чем мы сможем сделать foo
. В файле force
не существует make определяет, что ему нужно выполнить цель, чтобы сделать force
.
Таким образом, мы достигли точки, когда вещи начинают происходить с точки зрения выхода. force
выполняет то, что echos force
, затем выполняется правило подстановочного знака, которое echos foo
, наконец, делает его готовым к созданию foo, а команда - только для эха hello
.
Таким образом, это фактически в обратном порядке, от внешней зависимости сначала до конечной цели.
Когда вы уберете force
как зависимость правила подстановки тогда подстановочные правило будет определять нет ничего сделать, чтобы создать силу, и поэтому не будет выполнять его тело (вторя foo
), но, как hello
не существует, он будет выполните тело цели foo
.
Если включить что-то сделать файл силу в целевой силы (например touch force
) вы увидите, что в настоящее время foo
и hello
печати, но не force
.
Вы можете увидеть шаги, которые выполняются, если вы передадите флаг --debug=a
(все), чтобы сделать в командной строке.
Если вы хотите получить хорошее представление о том, как делать работы, тогда вы должны прочитать [this] (http://www.oreilly.com/openbook/make3/book/index.csp) вместо того, чтобы постепенно добавлять больше ваши проблемы с переполнением стека. –