Использование команд оболочки (в Makefile - PullRequest
1 голос
/ 14 марта 2019

Я готовлю некоторые латексные файлы и решил сделать несколько make-файлов, чтобы помочь мне скомпилировать и очистить латексные файлы. Поэтому я создал следующий make-файл

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, было бы неплохо.

Спасибо

1 Ответ

2 голосов
/ 14 марта 2019

Проблема в том, что команды рецепта передаются в /bin/sh, который не может обработать этот синтаксис.Вы можете изменить свой Makefile так:

clean:
    bash -O extglob -c "rm -rf !(makefile|$(aula).tex|$(aula).pdf) -v"

Чтобы заставить эту команду запускаться в bash при включенном extglob.

Или определить переменную SHELL для вашего make, например:запустив:

make SHELL="/bin/bash -O extglob" clean

Или добавив:

SHELL := /bin/bash -O extglob

В ваш файл make.Первый параметр влияет только на вызов оболочки этой одной команды, последний применяется ко всем вашим рецептам (командам).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...