我是makefile的新手,并尝试通过使用包含touch file-{1..10}.txt
的makefile一次创建多个文件。由于它创建的文件名为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
将make
输入到终端时,打印
Creating empty text files...
touch file-{1..10}.txt
并创建文件file-{1..10}.txt
。向终端输入touch file-{1..10}.txt
会照常创建file-1.txt
至file-10.txt
。
POSIX标准要求make
始终调用外壳程序/bin/sh
。它永远不会调用用户首选的外壳程序(想想非可移植性that会造成多大的灾难!)
您想要的括号扩展名不是sh
的POSIX定义的一部分。这是bash
和其他一些Shell提供的附加功能。在/bin/sh
是bash链接的系统上,例如MacOS和基于Red Hat的系统,大括号扩展将在makefile中起作用。
在/bin/sh
是指向dash
之类的POSIX兼容外壳的链接的系统上,例如Ubuntu,试图在您的makefile配方中使用非POSIX功能将不起作用。
您可以写出触摸操作,也可以添加:
SHELL := /bin/bash
对您的makefile强制make调用bash
。请注意,您的makefile现在不再可移植到没有安装/bin/bash
的系统上。