Прошло очень много времени с тех пор, как я использовал Make ...
Есть несколько способов указать конкретную оболочку для использования.Оболочкой по умолчанию для старого Make была оригинальная оболочка Bourne.Если вам нужна другая оболочка, вам нужно было установить ее самостоятельно.
Вы используете Linux и GNU, поэтому я предполагаю, что вы используете BASH в качестве оболочки по умолчанию.Попробуйте эту команду в вашем Make:
echo "random = $RANDOM"
Если это просто печатает random =
и не содержит случайного числа, ваш Make использует оболочку Bourne в качестве оболочки по умолчанию вместо BASH.(Что странно, потому что я не думал, что в Linux была настоящая оболочка Bourne ...) Чтобы обойти это:
- Вы можете добавить макрос
SHELL
, указывающий на оболочку BASH.. - Вы можете включить оболочку в свою команду.
Вместо:
@mkdir -pv test/{a,b}
Поставьте это:
/bin/bash -c @mkdir -pv test/{a,b}
Thisуказывает, что вы хотите использовать BASH, а не стандартную оболочку / bin / sh Bourne.
Если echo random = $RANDOM
печатает случайное число, вы используете BASH (или, по крайней мере, Kornshell), но BRACE EXPANSIONне может быть установлен.Попробуйте использовать это в вашем Makefile:
set -o
и убедитесь, что braceexpand
включен.Это может быть отключено при запуске Make.