O primeiro problema ( echo $f
) é devido a escapar dentro do Makefile, se você usar $f
, então o make vai pensar que você está se referindo à variável make ao invés do shell e ele expandirá esse (para vazio), o que fará com que o seu shell execute um único echo
com uma linha em branco para cada arquivo. A solução é escapar do $
dobrando-o, em outras palavras, use $$f
, nesse caso o make consumirá um dos $
s e passará ao shell um $f
, que é o que você deseja.
Com relação ao segundo problema (formato de time
output), o que você está vendo é a diferença no formato de saída entre o bash time
embutido e o comando externo /usr/bin/time
.
make executará os comandos em seu Makefile passando-os para /bin/sh
, que algumas distribuições do Linux (principalmente Debian e Ubuntu) apontam para dash
, que é um shell mais simples que não implementa uma construção em time
e acabaria invocando o comando externo nesse caso.
Você pode obter o bash time
output dizendo ao make para executar os comandos em seu Makefile usando bash, o que você pode fazer com esta atribuição de variável em seu Makefile:
SHELL = /bin/bash