我有一个生成文件规则,它根据列表的内容生成一个 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();
}
但是,在我的带有 GNU Make 3.82 (x86_64-w64-mingw32) 的 windows 7 64 位平台上,
我得到以下信息(全部在一行上):
"#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 平台上都正确?