Локальная переменная в make-файле не раскрывается правильно - PullRequest
0 голосов
/ 24 июня 2019

У меня есть следующая функция в make-файле:

define INSTALL_SCRIPT
SRC_DIR = $(ROOT)\src
cd $(SRC_DIR)
$(SRC_DIR)\stage.bat
endef

Я также повторяю шаги, поэтому вот вывод приведенного выше фрагмента:

$SRC_DIR = C:\project_root\src
'SRC_DIR' is not recognized as an internal or external command,
operable program or batch file.
$cd
C:\project_root
\stage.bat
'\stage.bat' is not recognized as an internal or external command,
operable program or batch file.

Кажется, что в операторе присваиваниязначение расширяется правильно, но тогда $(SRC_DIR) выдает ошибку.Затем cd переходит на один каталог вверх (а не src), затем, когда мне нужно выполнить пакетный файл, значение $(SRC_DIR) кажется пустым.

1 Ответ

1 голос
/ 24 июня 2019

Предполагая, что вы пытаетесь сделать это из контекста рецепта, вам нужно будет сделать это следующим образом:

define INSTALL_SCRIPT
   set SRC_DIR=$(ROOT)\\src & \
   cd %SRC_DIR% & \
   %SRC_DIR%\\stage.bat
endef

sometarget:
   @$(INSTALL_SCRIPT)

Вам нужно \ в конце каждой строки, чтобы соединить их водна строка рецепта (в противном случае переменная, которую вы установите, выйдет из контекста, когда завершится оболочка первой строки рецепта).Вы, кажется, используете окна, поэтому я считаю, что вам нужно использовать синтаксис %varname% для ссылки на переменные.Обратите внимание, что $(ROOT) является переменной makefile в этом случае, поэтому она все еще использует синтаксис $.(Обратите внимание, что если бы вы были в bash, вам нужно было бы использовать $$ для ссылки на переменные оболочки).Вам также нужно удвоить \\ в именах каталогов, так как make будет интерпретировать первый слэш как escape, а затем передать одиночный слеш cmd.

Обратите внимание, что на моем компьютере с Windows не было установлено makeна этом, поэтому я не мог проверить выше, так что вполне возможно, что я что-то пропустил.

...