Não é possível usar a palavra-chave `time` na ação da regra Makefile

Não é possível usar a palavra-chave `time` na ação da regra Makefile

Eu tenho um Makefile simples:

correr :
	tempo eco foo

Aqui está a saída quando eu uso:

$ make run
time echo foo
make: time: Command not found
make: *** [Makefile:2: run] Error 127

Por que não funciona? Pelo que entendi, timea palavra-chave está em bash(a menos que você também tenha instalado otime programa, o que não tenho) e Makefileuso shcomo shell padrão, mas tenho esse link sim para bash. Aqui estão alguns outros resultados relevantes:

$ type -a time
time is a shell keyword
$ bash --version
GNU bash, version 5.0.7(1)-release (x86_64-pc-linux-gnu)
$ ls -l "$(which sh)"
lrwxrwxrwx 1 root root 4 Apr 30 05:13 /usr/bin/sh -> bash
$ make --version
GNU Make 4.2.1
$ ls -l /bin
lrwxrwxrwx 1 root root 7 May 23 10:18 /bin -> usr/bin
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 30 05:13 /bin/sh -> bash
$ /bin/sh -c 'time true'

real    0m0.000s
user    0m0.000s
sys     0m0.000s

edit: observe também que /binestá vinculado a /usr/bin, portanto o problema não se deve a uma distinção entre /bin/sh e /usr/bin/sh. Também estou usando o Arch Linux, com pacman -Syuatualização mais recente a partir de hoje, 28 de junho de 2019.

Além disso, aqui está o resultado de um hexdump do Makefile:

$ xxd Makefile
00000000: 7275 6e20 3a0a 0974 696d 6520 6563 686f  run :..time echo
00000010: 2066 6f6f 0a                              foo.

Responder1

Ter shum link simbólico para bashnão significa que invocar shserá equivalente a invocar bash.

Isso é o queArquiwikidiz:

When Bash, mksh and zsh are invoked with the sh name, 
they automatically become more POSIX compliant.

Isso significa que alguns recursos não estarão disponíveis e você ainda deve escolher bashum shell no seu Makefilese precisar dos recursos do bash.

Adicione isto como a primeira linha para Makefileescolher bashcomo shell:

SHELL := /bin/bash

Isso deve resolver seu problema.

Mais sobre como escolher o shell pode ser encontrado ema documentação do GNU Make

informação relacionada