Ваш глобус:
test_!(*.o)
использует расширенный синтаксис глобализации.
Посмотрите на это:
$ shopt | grep extglob
extglob on
А затем на:
$ cat Makefile
SHELL := /bin/bash
all:
shopt | grep extglob
$ make
shopt | grep extglob
extglob off
Вызывается в терминале, bash
находится в интерактивном режиме (согласно bash -i
), а параметр оболочки extglob
имеет значение on
.
Вызывается make
, bash
нетв интерактивном режиме (согласно bash -c <command>
), а параметр оболочки extglob
равен off
.
Вы можете заставить команду рецепта работать, включив extglob
в .SHELLFLAGS
вашего make-файла, например
$ cat Makefile
SHELL := /bin/bash
.SHELLFLAGS := -O extglob -c
all:
cp test_!(*.o) ./tmp/
$ make
cp test_!(*.o) ./tmp/
cp: cannot stat 'test_!(*.o)': No such file or directory
Makefile:5: recipe for target 'all' failed
make: *** [all] Error 1
Как видите, в моем рабочем каталоге нет совпадений, но нет синтаксической ошибки.