我正在准备一些乳胶文件,并决定制作一些makefile来帮助我编译和清理de Latex文件。所以我创建了以下makefile文件
aula=listaProb
all: compile clean
compile:
pdflatex $(aula).tex
clean:
rm -rf !(makefile|$(aula).tex|$(aula).pdf) -v
但是当我执行“ make”时,出现以下错误
rm -rf !(makefile|listaProb.tex|listaProb.pdf) -v
/bin/sh: 1: Syntax error: "(" unexpected
makefile:8: recipe for target 'clean' failed
make: *** [clean] Error 2
但是命令
rm -rf !(makefile|listaProb.tex|listaProb.pdf) -v
在终端上工作正常。 怎么了?我找不到任何错误:/ ..
Ps。我使用这种方式删除文件,因为我想删除除指定文件以外的所有文件。它需要命令
shopt -s extglob
使用前。如果有人知道如何在不使用extglob的情况下做到这一点,那就太好了。
谢谢
答案 0 :(得分:2)
问题是配方命令传递到/bin/sh
,后者无法处理该语法。您可以将Makefile更改为:
clean:
bash -O extglob -c "rm -rf !(makefile|$(aula).tex|$(aula).pdf) -v"
要强制在打开extglob
的情况下在bash中运行该命令。
或为您的SHELL
定义make
变量,例如通过运行:
make SHELL="/bin/bash -O extglob" clean
或添加:
SHELL := /bin/bash -O extglob
到您的make文件。前一个选项仅影响该命令的外壳程序调用,后一个选项将应用于您的所有配方(命令)。