GNU Make で OS の切り分け

C や C++ でプログラム全体を書いてるならともかく、例えば MySQL の UDF を書く程度の理由で、いちいち automake && autoconf なんてやってられない。でも OS によって gcc のフラグを変更したいとかそういう切実な欲求はあったりする。というわけで GNU Makefile の条件分岐を使ってアドホックに対処。

CFLAGS=-O2 -g -Wall -I/usr/local/mysql/include
OSNAME=${shell uname -s}
ifeq ($(OSNAME),Darwin)
	SHARED_OPTS=-bundle
else
	SHARED_OPTS=-shared -fPIC
endif
CXXFLAGS=$(CFLAGS)

all: foo.so

foo.so: foo.cc
	g++ $(CXXFLAGS) $(SHARED_OPTS) -o $@ foo.cc

clean:
	@rm -f foo.so

こんな感じ。環境によってインクルードパスを変更したい場合とかは、

% CFLAGS='-O2 -g -Wall -I/usr/local/mysql51/include' make -e

とかすればいいし。これならものぐさな自分でも書ける。GNUmake++