我是 makefile 的新手,并尝试使用包含touch file-{1..10}.txt. 这不会按预期工作,因为它创建了一个名为的文件,file-{1..10}.txt而不是file-1.txt通过file-10.txt.
这是makefile的代码:
.DEFAULT_GOAL := generate
say_hello:
@echo "Hello World"
generate:
@echo "Creating empty text files..."
touch file-{1..10}.txt
clean:
@echo "Cleaning up..."
rm *.txt
Run Code Online (Sandbox Code Playgroud)
当进入make终端时,它打印
Creating empty text files...
touch file-{1..10}.txt
Run Code Online (Sandbox Code Playgroud)
并创建文件file-{1..10}.txt。
进入touch file-{1..10}.txt到所述终端创建file-1.txt通过file-10.txt如常。
POSIX 标准要求make始终调用 shell /bin/sh。它永远不会调用用户的首选外壳(认为非便携的灾难是什么那是!)
您想要的大括号扩展不是sh. 它是由bash和其他一些 shell提供的附加功能。在/bin/sh有 bash 链接的系统上,例如 MacOS 和基于 Red Hat 的系统,大括号扩展将在 makefile 中工作。
在/bin/sh有 POSIX 兼容 shell 链接的系统上dash,例如 Ubuntu,尝试在您的 makefile 配方中使用非 POSIX 功能将不起作用。
您可以写出触摸操作,也可以添加:
SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)
到您的 makefile 以强制 make 调用bash. 请注意,您的 makefile 现在不再可移植到尚未/bin/bash安装的系统中。