makefileでMinGW32だけ特殊扱い
Makefileもの2連発。
SDL-OFFとその前の準備で他人の環境への配慮の無さを反省したので、ちょっと工夫してみた。
MinGW32な環境はリンクするライブラリが結構変わってしまったり、ヘッダの場所が違ったりと、気をつけるところが多々ある。
そこでMinGW32な環境での実効を自動判別するように工夫してみた。
GCCMACHINE:=$(shell $(CC) -dumpmachine) ifeq ($(findstring "mingw32","$(GCCMACHINE)"),"mingw32") LDFLAG += -lwinmm -lopengl32 -lwsock32 -lcomctl32 -lglu32 else LDFLAG += -lGL -lGLU -ldl endif
ちなみにWindows上のMinGW32/Msysのgccではgccは"mingw32"となるけれど、Linux上のi386-mingw-gccでは"i386-mingw"だった。
とりあえず両方ともに対応するため、findstringしてみました。
これでmake時にCC, CXXだけ指定すれば良くなり結構快適になった。
makefileでgccバージョンごとに切り替え
今度は外部コマンドにまで依存してみる。ちなみにMsys上でも動作確認済み。
gccはバージョンごとに使える引数が結構違う。
常に最新だけ使っていれば良いならそれでもいいんだけれど、MinGW32はgcc3.x系だし、Linuxの中にはまだ4.0を使っているものあったりするので、頭が痛い。
そこで上と同じように自動判別できるようにしてみた。
GCCVERSION:=$(shell $(CC) -dumpversion) dot:=. empty:= space:=$(empty) $(empty) GCCVERSION:=$(subst $(dot),$(space), $(GCCVERSION)) GCCMAJOR:=$(word 1, $(GCCVERSION)) GCCMINOR:=$(word 2, $(GCCVERSION)) ifeq (1,$(shell expr $(GCCMAJOR) \>= 4)) # 4.0以上用の設定 endif ifeq (1,$(shell expr \( $(GCCMAJOR) \> 4 \) \| \( $(GCCMAJOR) \= 4 \& $(GCCMINOR) \>= 1 \))) # 4.1以上用の設定 endif
makeの条件分岐には"等しい" or "定義されている"しかないので、大小判定部分はexprコマンドでやってます。
これで4.1で新設された最適化フラグも気軽に使えます。