Ale*_*lan 1 c regex bash makefile
我有一大堆的顺序命名C源文件(比如说f1.c,f2.c,f3.c等).
在我的Makefile中,我有一个clean:过去看起来像这样的定义:
rm -f f1
rm -rf f1.dSYM
rm -f f2
rm -rf f2.dSYM
# etc
Run Code Online (Sandbox Code Playgroud)
所以我想用正则表达式替换它,如果我将它直接输入命令行,这个效果很好:
ls | grep -P ^f[0-9]+(|\.dSYM)$ | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
但是,如果我把那个命令放在我干净的定义中,当我运行时make clean,我得到这个:
$ make clean
ls | grep -P ^f[0-9]+(|\.dSYM)| xargs rm -rf
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `ls | grep -P ^ex[0-9]+(|\.dSYM)| xargs rm -rf'
make: *** [clean] Error 2
Run Code Online (Sandbox Code Playgroud)
我想有我正则表达式的一些特殊字符所导致语法错误......我已经试过引号和转义的东西,但什么也没有真正帮助,没有人知道我怎么能得到这个工作,我的Makefile里?
另一种解决方案,$(wildcard)用于查找C源和模式替换以获取派生文件名:
SOURCES := $(wildcard f[0-9]*.c)
clean :
rm -f $(SOURCES:.c=)
rm -rf $(SOURCES:.c=.dSYM)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |