Ваш make-файл не делает то, что вы надеетесь. Это расширится до:
out/1 out/2 out/3 : in/1 in/2 in/3
@ echo $?
Это НЕ то же самое, что сказать, что каждый in
файл является предпосылкой его конкретного out
файла. Вышесказанное идентично письму:
out/1 : in/1 in/2 in/3
@ echo $?
out/2 : in/1 in/2 in/3
@ echo $?
out/3 : in/1 in/2 in/3
@ echo $?
, то есть каждый out
файл зависит от ALL in
файлов. Вот почему вы получаете результат, который вы делаете.
Также обратите внимание, что make
создает только первую цель, найденную в make-файле (и, конечно, все предпосылки этой цели), поэтому вы не видите никакой информации для других файлов out
. Вам нужна первая цель, такая как all
, которая зависит от всех файлов out
.
Вам нужно либо использовать три явных правила:
.PHONY: all
all: out/1 out/2 out/3
out/1 : in/1
@ echo $?
out/2 : in/2
@ echo $?
out/3 : in/3
@ echo $?
(для этого необходимо заранее знать, какие файлы) или использовать шаблонное правило:
.PHONY: all
all: out/*
out/% : in/%
@ echo $?