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

时间:2012-03-29 15:55:36

标签: makefile gnu quotes cmd

我有一个c源文件,我想通过gcc的-D传递一个引用的宏 命令行标志。 (另见How do I pass a quoted string with -D to gcc in 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,gnu的make将尝试调用/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 :(得分:0)

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

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

或者,将它们切换为正斜杠或首选/ cygdrive / c样式。作为旁注,我似乎记得Make Make 3.81中依赖项不再支持Windows样式文件名。

您可能还想设置SHELL变量并查看手册和源tarball中包含的NEWS文件中的一些警告mentioned