Você não deve ter vários destinos implícitos em uma única regra. Não me lembro se isso é declarado em qualquer lugar, mas regras como essa são certamente más práticas. Aqui está o que está acontecendo:
$ cat Makefile
%.in %.out :
echo BLANK > $@
$ make -d a.in a.out
[... irrelevant output skipped ...]
Updating goal targets....
Considering target file 'a.in'.
File 'a.in' does not exist.
Looking for an implicit rule for 'a.in'.
Trying pattern rule with stem 'a'.
Found an implicit rule for 'a.in'.
Finished prerequisites of target file 'a.in'.
Must remake target 'a.in'.
echo BLANK > a.in
Successfully remade target file 'a.in'.
Considering target file 'a.out'.
File 'a.out' was considered already.
make: Nothing to be done for 'a.out'.
Anote as linhas:
Considering target file 'a.out'.
File 'a.out' was considered already.
Alvos implícitos não "existem" até que sejam tentados e, portanto, a regra não é "dividida" em várias regras. Quando a.in
é tentado e correspondido com sucesso, todos os outros alvos são marcados como tentados. A grande maioria do tempo isso não é o que você quer. Apenas escreva duas regras.