2012-03-29 6 views
1

Ich habe eine c-Quelldatei, an die ich ein quoted Makro über GCC -D Befehlszeilen-Flag übergeben möchte. (Siehe auch How do I pass a quoted string with -D to gcc in cmd.exe?). Und ich arbeite in cmd.exe.Wie behandelt Gnu-make mit Anführungszeichen im Makefile, wenn es in cmd.exe aufgerufen wird?

Es ist möglich, das Programm direkt wie so zu kompilieren:

c:\MinGW\bin\gcc.exe -DDEFINED_STRING="\"foo bar baz\"" foo.c -o foo.exe 

Aber wenn ich eine Make-Datei mit folgendem Inhalt

foo.exe: foo.c 
    c:\MinGW\bin\gcc.exe -DDEFINED_STRING="\"foo bar baz\"" foo.c -o foo.exe 

und dann ein make, GNUs machen versuchen, erstellen ausführen /bin/sh und die umgekehrten Schrägstriche des Pfades zu gcc.exe aufrufen:

gcc-4.7.0/gcc/config/avr -c c:/temp/gcc-4.7.0/gcc/gcc.c -o o/gcc/gcc.o 
/bin/sh: c:MinGWbing++.exe: command not found 
make: *** [o/gcc/gcc.o] Error 127 

stradnell genug, das passiert nicht, wenn ich -DDEFINED_STRING=foo (das heißt: ohne Anführungszeichen) verwenden. viele Nuancen

make -v druckt GNU Make 3.81

Antwort

0

in einer Umgebung mit Windows hat zu machen. In diesem Fall sieht es aus wie Sie gerade Ihre Schrägstriche müssen entkommen, wie so:

foo.exe: foo.c 
    c:\\MinGW\\bin\\gcc.exe -DDEFINED_STRING="\"foo bar baz\"" foo.c -o foo.exe 

Alternativ schalten Sie diese Slashes oder die bevorzugte/cygdrive/c-Stil. Als eine Randnotiz, ich erinnere mich, dass Windows-Stil-Dateinamen nicht mehr in Abhängigkeiten ab Make 3.81 unterstützt werden.

Vielleicht möchten Sie auch die SHELL-Variable setzen und einige der Vorbehalte mentioned in der Bedienungsanleitung und in der NEWS-Datei im Quell-Tarball überprüfen.