toge's diary

コンピュータ関連の趣味をつらつらと。

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で新設された最適化フラグも気軽に使えます。