我有一个makefile规则,根据列表内容生成一个C文件。
LIST = foo \
bar
generated.c:
@echo "Creating $@"
(echo "#include <stuff.h>"; \
echo "void init_local() {"; \
for i in $(LIST) ; do \
echo " init_$$i();"; \
done;
echo "}") > $@
在Linux平台上,这给了我期望的结果:
#include <stuff.h>
void init_local() {
init_foo();
init_bar();
}
然而,在我的 Windows 7 64 位操作系统上,使用 GNU Make 3.82 (x86_64-w64-mingw32),我得到了以下结果(全部在一行上):
"#include <stuff.h>"; \"void init_local() {" \
for i in foo bar; do echo " init_$i();"; done; echo "}"
我也尝试将规则分解为单个行:
echo "#include <stuff.h>" > %@
echo "void init_local() {" >> $@
...
通过那个解决方案,每行都会有1个字符串,但引号仍然存在!
我该如何更改规则以使生成的文件在Linux和Windows平台上均正确?