Shell通配符/ glob用于生成文件中的可选字符串

时间:2019-07-19 12:27:55

标签: shell makefile glob

我试图在多平台Makefile中“优化”我的“干净”目标,因此我正在寻找一种删除带有或不带有Windows扩展名.exe的可执行文件的方法。

当然可以!

rm file file.exe

但是我正在寻找类似的东西

rm file(.exe)?

我也尝试过

rm file{,.exe}

这也不起作用。

我很惊讶地发现我尝试的方法不起作用,所以我主要是为了发布更多关于globing的信息,因为带有两个显式文件名的版本可以正常工作。

1 个答案:

答案 0 :(得分:3)

默认情况下,Make使用/bin/sh执行命令,其对glob的支持有限。

$ cat Makefile 
test:
    echo foo{bar,baz}
$ make
echo foo{bar,baz}
foo{bar,baz}

如果您想使用花括号等精美功能,则需要通过设置SHELL来切换外壳。

$ cat Makefile 
SHELL = /bin/bash

test:
    echo foo{bar,baz}
$ make
echo foo{bar,baz}
foobar foobaz

我不一定建议这样做,因为它会使Makefile的可移植性降低。

对于它的价值,GNU Automake的策略是根据平台设置EXEEXT变量。那么干净的规则是:

rm -f file$(EXEEXT)