makeを実行すると、unameコマンドが見つからない!といったエラーがいきなり出てくる、うっ、重症っぽい。Cygwinのバージョンを1.5.20にアップしているのが原因かもしれない。
というよりも、WindowsとGNU makeコマンドの相性が最悪なのである。Windows環境でのJDKビルド環境はかなり問題が多い。
以下問題解決メモ
環境変数PATHの修正
Cygwinの実行ファイルのパスを追加する際に、
PATH=...<中略>...;;C:\cygwin\bin
のように、;;と区切子が2つ連続で入っているのが原因。Visual Studioの環境変数設定バッチファイルでPATHの設定の最後に;がついており(最低!)、それを知らずにJDKビルド用バッチファイルで、PATH=%PATH%;C:\Cygwin\binと設定していたため。
回避策として、PATH=%PATH%C:\Cygwin\binのようにしなくてはならない。
makeエラー(multiple target patterns)
sanity-rules.gmk:44で以下の記述でmultiple target patternsエラーが発生
$(ERROR_FILE) $(WARNING_FILE) $(MESSAGE_FILE): @$(prep-target)
make -pコマンドで、ERROR_FILE、WARNING_FILE、MESSAGE_FILEを調べると、
ERROR_FILE := D:/mustang/b91out/sanityCheckErrors.txt
WARNING_FILE := D:/mustang/b91out/sanityCheckWarnings.txt
MEESSAGE_FILE := D:/mustang/b91out/sanityCheckMessages.txt
のようになっている。D:という部分がmakeの書式と干渉してエラーになっていると考えられる。相対パスで記述するか、ドライブ記述を削除するかが回避策として考えられる。(同じDドライブ上で作業している場合、D:を削除して/mustang/...と記述してもアクセス可能)
ERROR_FILE等は、control/make/common/Defs.gmkで定義されます。
# The MESSAGE, WARNING and ERROR files are used to store sanityck and # SCCS check messages, warnings and errors. export ERROR_FILE := $(ABS_OUTPUTDIR)/sanityCheckErrors.txt export WARNING_FILE := $(ABS_OUTPUTDIR)/sanityCheckWarnings.txt export MESSAGE_FILE := $(ABS_OUTPUTDIR)/sanityCheckMessages.txt
CygwinのMLを探すと、makeのバージョン3.81でこのエラーが発生するとの報告あり。原因は、makeのバージョン3.81ではWindowsのパスを認識できないためです。ドライブレターの直後の:が、ターゲットの末尾の:と誤認されてしまいます。
http://cygwin.com/ml/cygwin/2006-07/msg00389.html
そこで、makeのバージョンを3.80に戻して回避します。