Makefile 在 Windows 上不工作(mingw32-make,错误 255,此时意外)

Makefile not working on Windows (mingw32-make, Error 255, unexpected at this time)

我有一个在 Cygwin 下工作的 makefile,但是当我尝试从 cmd.exe 运行 Mingw32-make.exe 时,我遇到了一个错误:

all: my_file

my_file: \
  static/XML/head.xml \
  ../lib/Dependencies/common/1.0 ../lib/Dependencies/licensing/1.0 ../lib/Dependencies/json/1.0 \
  src/common \
  src/MainFolder \
  static/XML/tail.xml
  $(build-file)

# Simple file and directory concatenation.
define build-file
@for dep in $^; do \
  if [ -d $$dep ]; then \
    for file in $$dep/*.lua; \
    do \
      cat $$file; \
      echo; \
    done \
  else \
    cat $$dep; \
    echo; \
  fi \
done > bin/$@.lua
@echo 'BUILT $@'
endef

当我尝试 运行 mingw32-make.exe 时,出现以下错误:

dep was unexpected at this time.
Makefile:9: recipe for target 'my_file' failed
mingw32-make: *** [my_file] Error 255

文件的缩进设置为制表符。

到目前为止,我尝试过的所有方法都没有奏效。有人可以帮忙吗?我该怎么做才能使它正常工作?

定义内的代码define build-file... endef 将由主机系统中的 shell 执行。

bash脚本,bash是通常的shell linux(和 cygwin)。当你试图执行 make 原生于 Windows 和 mingw32-make.exe, shell 是 Windows shell、cmd.exe,它 不理解 bash 脚本。

要工作,您的 make 需要检测(或被告知)是否 主机系统是 Windows 或 Linux(-like)。那么你就可以 有条件地 select build-file 的可行定义,例如

ifdef WINDOWS
define build-file
    ... cmd commands ...
endef
else
define build-file
    ... bash commands ...
endef
endif

事后思考

或者,如果您的 Windows PATH 中有来自 Cygwin 的 bash.exe, 你应该可以把 SHELL = bash.exe 放在 你的 makefile 使 bash 成为你的 shell。