我有一个简单的 Makefile:
跑 : 时间回声
这是我使用它时的输出:
$ make run
time echo foo
make: time: Command not found
make: *** [Makefile:2: run] Error 127
为什么它不起作用?据我了解,time
是关键字 in bash
(除非您还安装了我没有安装的time
程序),并Makefile
用作sh
默认 shell,但我已将其链接到bash
. 这是其他一些相关输出:
$ 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
编辑:还请注意它/bin
与 simlinked /usr/bin
,所以问题不是由于 /bin/sh 和 /usr/bin/sh 之间的区别。此外,我正在使用 Arch Linux,最新pacman -Syu
更新截至今天 2019 年 6 月 28 日。
此外,这里是 Makefile 的 hexdump 的结果:
$ xxd Makefile
00000000: 7275 6e20 3a0a 0974 696d 6520 6563 686f run :..time echo
00000010: 2066 6f6f 0a foo.
符号
sh
链接到bash
并不意味着调用sh
将等同于调用bash
。这是Archwiki所说的:
这意味着某些功能将不可用,
bash
如果Makefile
您需要bash
.Makefile
将此添加为您选择bash
作为 shell 的第一行:这应该可以解决您的问题。
更多关于选择 shell 的信息可以在GNU Make 文档中找到