Вы пытаетесь делать вещи, для которых Makefile не предназначен. Вы уже укушены одним из предостережений Makefile: каждая командная строка запускается в своей собственной оболочке.
Практическое правило: рецепт правила должен создать имя файла с именем, аналогичным цели правила.
Вот правило (для уточнения терминов):
target:
recipe command lines
should create file named target
Есть некоторые исключения из этого практического правила. Наиболее заметно make clean
и make install
. Оба обычно не создают файлы с именем clean
или install
. Можно утверждать, что make test
также может быть исключением из этого практического правила.
Вы наткнулись только на предупреждение о смене каталога. Который является распространенным предупреждением, чтобы споткнуться при написании make-файлов. Это даже упоминается в руководстве: https://www.gnu.org/software/make/manual/html_node/Execution.html. Но имейте в виду, что это только одно из многих предостережений, которые делает make.
Если это расширение вашего (ab) использования make-файла для запускаКоманды тогда все может быть хорошо. Но если вы хотите расширить функциональность и начать спотыкаться от предостережения к предостережению, то пришло время переосмыслить ваш подход. Либо извлеките рецепт из собственного скрипта, либо напишите скрипт-оболочку вокруг вашего make-файла. И если вы думаете о добавлении обработки аргументов в ваш make-файл, то сначала прочтите это: Передача аргументов в «make run»
По иронии судьбы вы также используете функцию выполнения команд npm: npm run-script
. Это, безусловно, имеет свой набор предостережений. Я не знаю, потому что я не использовал npm так много.