makefile 中的局部变量未正确扩展

Local variable in makefile is not expanded correctly

我在 makefile 中有以下功能:

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)的值似乎是空的。

假设您正尝试从食谱上下文执行此操作,则需要按如下方式执行:

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

sometarget:
   @$(INSTALL_SCRIPT)

您需要在每一行的末尾添加 \ 以将它们连接成一个单一的配方行(否则,当第一个配方行的 shell 终止时,您设置的变量将脱离上下文).您似乎正在使用 windows 所以我相信您需要使用 %varname% 语法来引用变量。请注意,$(ROOT) 在本例中是一个 makefile 变量,因此它仍然使用 $ 语法。 (请注意,如果您在 bash 中,则需要使用 $$ 来引用 shell 变量)。您还需要在目录名称中加倍 \,因为 make 会将第一个斜杠解释为转义符,然后将单个斜杠传递给 cmd。

请注意,我的 windows 机器上没有安装 make,所以我无法测试上面的内容,所以很可能我遗漏了什么。