2011-06-20 13 views
0

というプロジェクトをコンパイルするために、MakefileCygwinに書き込もうとしています。 一部の環境変数は、Windowsで定義されています(一部のSDKへのパスなど)。例えば、SDKPATH C:\MySDKPathと言ってください。CygwinのMakefileと環境変数

のMakefileの中で、私はSDKの他のものの間でディレクトリ、含めるアクセスするには、このパスを使用しています:ターゲットルールで

CFLAGS := -I$(SDKPATH)/include

$(CC) $(CFLAGS) $< -o [email protected]

を私の問題は、make後ということですそれをC:\MySDKPath/includeに展開し、それを引数としてコンパイラに渡すと、引数は明らかに意図ではないC:MySDKPath/includeに展開されます。

環境変数を実際に変更することはできません。これは、SDKによって設定されているため、誰もがそれを調整する必要があるため、あらゆる種類の新しい問題が発生します。私はいくつかの迅速かつ汚れた検索を行い、(MYSDKPATH := $(patsubst C:%,/cygdrive/c%,$(subst \,/,$(SDKPATH)))のように)交換することができますが、この可能性の高い一般的なケースを処理するきれいで確立された方法がないかと思います。

+0

迷子になっているバックスラッシュは1つだけですか、いくつかのパスにはありますか? – Beta

+0

@Beta:* my *マシンにはいくつかありますが、それは環境変数なのでマシンに依存していますので、どれくらいあるか分かりません。 –

答えて

1

これは一種の醜いものですが、UNIXで仕事をしているようですので、Cygwinで試してみてください。

+0

はい、それは私が考えていた仕事の種類でした。試したことはありませんが、Cygwinでもうまくいくはずです。多分、私たちは 'sed '@^\([A-Z] \):\ @/cygdrive/\ 1/@ 1; s @ \\ @/@ g"のようなものを使うことさえできます。しかし、私はまだエレガントなソリューションが何であるかを知ることに興味があります。 :) –

1

cygwinを使用しているので、cygpathを使用してパススタイルを変換できます。

CFLAGS := -I$(shell cygpath -ua "$(SDKPATH)/include") 

このトリックを行う必要があります。