Makefile不会使用触摸创建多个txt文件

问题描述 投票:1回答:1

我是makefile的新手,并尝试通过使用包含touch file-{1..10}.txt的makefile一次创建多个文件。由于它创建的文件名为file-{1..10}.txt,而不是创建文件file-1.txtfile-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.txtfile-10.txt

makefile
1个回答
1
投票

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的系统上。

© www.soinside.com 2019 - 2024. All rights reserved.