リストの内容に基づいてCファイルを生成するmakefileルールがあります。
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ビットプラットフォームで
は、次のようになります(すべて1行で)。
"#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行に1つの文字列がありますが、引用符はまだあります。
LinuxとWindowsの両方のプラットフォームで生成されたファイルを正しくするためにルールを変更するにはどうすればよいですか?