2012-03-29 9 views
1

私はgccの-D コマンドラインフラグを使って引用符付きマクロを渡したいcソースファイルを持っています。 (How do I pass a quoted string with -D to gcc in cmd.exe?も参照してください)。私はcmd.exeで作業しています。gnu-makeは、cmd.exeで呼び出された場合、makefileのクォートをどのように扱いますか?

それは直接そのようなプログラムをコンパイルすることが可能です:

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

しかし、私は、次の内容

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 

十分Stragnly私は(つまり:引用符なし)-DDEFINED_STRING=fooを使用する場合、これは起こりません。 Windows環境で作成

make -vプリント

答えて

0

GNU Make 3.81は、多くのニュアンスを持っています。スラッシュや優先/ cygdriveの/ Cスタイルを転送するためにそれらを切り替えて、また

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

:あなたがちょうどそうのようなあなたのバックスラッシュをエスケープする必要があるように、この場合には、それが見えます。補足として、私はWindowsスタイルのファイル名がMake 3.81以降の依存関係ではもはやサポートされていないことを思い出しています。

SHELL変数を設定し、マニュアルの中のいくつかの警告と、ソースtarballに含まれているNEWSファイルを確認することもできます。

関連する問題