rm 命令在 shell 中有效,但在 Makefile 中无效

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

我有一个

rm
命令在 Makefile 中不起作用,但是当我将其复制到 shell 时它可以工作:

$ make clean
rm paper.{abs,blg,pdf,aux,log,bbl,out,xmpdata}
rm: cannot remove 'paper.{abs,blg,pdf,aux,log,bbl,out,xmpdata}': No such file or directory
make: *** [Makefile:8: clean] Error 1
$ rm paper.{abs,blg,pdf,aux,log,bbl,out,xmpdata}
$

什么原因会导致这种情况?文件权限似乎没问题。我尝试在文件名表达式周围使用双引号和撇号,但都不起作用。

更新:我在 Ubuntu 22.04 上运行 GNU Make 4.3

makefile glob rm
1个回答
0
投票

GNU Make 为 shell 运行符合 POSIX 标准的

/bin/sh
。 如果它调用用户正在使用的任何 shell,那么对于可移植性来说将是一场灾难。

您使用的

{}
形式不是符合 POSIX 的语法:POSIX 没有为
{}
定义任何特殊行为。 您正在尝试利用您的个人 shell 的非标准功能(可能是
bash
)。

您需要写出多个文件名或使用标准 POSIX 通配符,或者在 makefile 中添加一行以强制它使用 bash 而不是

/bin/sh
,例如:

SHELL := /bin/bash

请注意,您的 makefile 将无法在不存在

/bin/bash
的任何系统上正常工作。

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