Как gnu-make работает с кавычками в make-файле, если он вызывается в cmd.exe? - PullRequest
1 голос
/ 29 марта 2012

У меня есть исходный файл c, в который я хочу передать макрос в кавычках через gcc -D флаг командной строки. (См. Также Как передать строку в кавычках с -D в gcc в cmd.exe? ). И я работаю в cmd.exe.

Можно скомпилировать программу напрямую так:

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

Но если я создам makefile со следующим содержимым

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

и затем выполнить make, make gnu попытается вызвать /bin/sh и обратные слэши пути к gcc.exe исчезнут:

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

Как ни странно, этого не происходит, когда я использую -DDEFINED_STRING=foo (то есть: без кавычек).

make -v отпечатки GNU Make 3.81

1 Ответ

0 голосов
/ 27 мая 2012

Создание в среде Windows имеет много нюансов.В этом случае, похоже, что вам просто нужно избежать обратной косой черты следующим образом:

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

В качестве альтернативы, переключите их на прямую косую черту или предпочитаемый стиль / cygdrive / c.В качестве примечания, я напоминаю, что имена файлов в стиле Windows больше не поддерживаются в зависимостях с Make 3.81.

Возможно, вы также захотите установить переменную SHELL и просмотреть некоторые из упомянутых предостережений в руководстве и в файле NEWS, включенном в исходный архив.

...