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。
我有一个在 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。