我在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)
的值似乎为空。
答案 0 :(得分:1)
假设您要尝试从配方上下文中执行此操作,则需要执行以下操作:
define INSTALL_SCRIPT
set SRC_DIR=$(ROOT)\\src & \
cd %SRC_DIR% & \
%SRC_DIR%\\stage.bat
endef
sometarget:
@$(INSTALL_SCRIPT)
您需要在每一行的末尾使用\
来将它们合并为一个配方行(否则,当第一个配方行的外壳终止时,您设置的变量将脱离上下文)。您似乎正在使用Windows,所以我相信您需要使用%varname%
语法来引用变量。请注意,在这种情况下,$(ROOT)
是一个makefile变量,因此它仍然使用$
语法。 (请注意,如果您使用的是bash,则需要使用$$
来引用shell变量)。您还需要将目录名中的\\
加倍,因为make会将第一个斜杠解释为转义符,然后将单个斜杠传递给cmd。
请注意,我的Windows机器尚未安装make,因此我无法测试上述内容,因此很可能错过了一些东西。