我有以下食谱:
ZS_FPATH := $(filter-out %.awk %.py %.sed, $(wildcard src/*))
compile: ${ZS_FPATH}
mkdir -p ${PACKAGE_NAME}/bin
zsh -c "zcompile -Uz ${PACKAGE_NAME}/bin/${PACKAGE_NAME} ${ZS_FPATH}"
mkdir -p ${PACKAGE_NAME}/etc
:> ${PACKAGE_NAME}/etc/zsfnames.lst
while IFS="" read -r zsfpath || [ -n "${zsfpath}" ]; do
basename $${zsfpath} >> ${PACKAGE_NAME}/etc/zsfnames.lst;
done < "${ZS_FPATH}"
.PHONY: compile
# ------------------------------------------------------------------------------
当我运行目标“compile”时,返回以下错误:
mkdir -p utk/bin
zsh -c "zcompile -Uz utk/bin/utk src/bckpfile src/echopath src/tievalue"
mkdir -p utk/etc
:> utk/etc/zsfnames.lst
while IFS="" read -r zsfpath || [ -n "" ]; do
/bin/sh: -c: line 2: syntax error: unexpected end of file
make: *** [Makefile:63: compile] Error 2
我在 neovim 中使用 tabstop=2 来进行间距。我也尝试过 vs code 但没有成功。有人能指出该片段的问题吗?
makefile 配方中的每个逻辑行都在单独的 shell 中调用。整个配方都在单个 shell 中运行是不正确的。所以:
将由 make 运行为:
您可能已经明白 shell 现在抱怨的原因了。
如果要将多个物理行合并为一个逻辑行,则需要在 makefile 中添加反斜杠:
这会起作用。请注意,您还需要转义,否则
${zfspath}
它将在调用配方之前扩展为 shell 变量。