如果在cmd.exe中调用,gnu如何处理makefile中的引号?

如果在cmd.exe中调用,gnu如何处理makefile中的引号?,makefile,gnu,quotes,cmd,Makefile,Gnu,Quotes,Cmd,我有一个c源文件,我想通过gcc的-D 命令行标志。(另见)。我在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 然

我有一个c源文件,我想通过gcc的
-D
命令行标志。(另见)。我在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
,gnu的make将尝试调用
/bin/sh
和gcc.exe dissapear路径的反斜杠:

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

在Windows环境中制作有许多细微差别。在这种情况下,看起来您只需要像这样避开您的反斜杠:

foo.exe: foo.c
    c:\\MinGW\\bin\\gcc.exe -DDEFINED_STRING="\"foo bar baz\"" foo.c -o foo.exe
或者,将它们切换为正向斜杠或首选的/cygdrive/c样式。作为旁注,我似乎还记得,从Make 3.81开始,依赖项中不再支持Windows样式的文件名

您可能还需要设置SHELL变量,并查看手册和源tarball中包含的新闻文件中的一些注意事项