Вы можете указать глобальные настройки оболочки в .SHELLFLAGS
переменная , поскольку GNU составляет 3.82 . Вот так:
$ cat Makefile
.SHELLFLAGS := -o nounset -c
all:
echo "Foo is $${FOO}"
unset:
set -o nounset; echo "Foo is $${FOO}"
make-resolved:
echo "Foo is ${FOO}"
Вывод:
$ make all
echo "Foo is ${FOO}"
/bin/sh: FOO: unbound variable
make: *** [Makefile:4: all] Error 127
$ make unset
set -o nounset; echo "Foo is ${FOO}"
/bin/sh: FOO: unbound variable
make: *** [Makefile:7: unset] Error 127
Без .SHELLFLAGS
Первый вызов завершается успешно:
$ make all .SHELLFLAGS=-c
echo "Foo is ${FOO}"
Foo is
$ make unset .SHELLFLAGS=-c
set -o nounset; echo "Foo is ${FOO}"
/bin/sh: FOO: unbound variable
make: *** [Makefile:7: unset] Error 127
Обратите внимание, что вам нужно выйти $
чтобы это было на самом деле разрешено оболочкой, а не make. Последняя цель показывает, что make разрешит ${FOO}
, а оболочка не будет жаловаться:
$ make make-resolved
echo "Foo is "
Foo is
Вы также можете получить предупреждение (не ошибку) от make в этой ситуации , поскольку GNU make3,68 :
$ make --warn-undefined-variables make-resolved
Makefile:10: warning: undefined variable 'FOO'
echo "Foo is "
Foo is