変数上書き
make VAR=VALUE
makedepend
Makefileを書き換えるツール。
Makefileは改行で終わっていないと困ったことになるので注意。
$ makedepend sourcefiles
特殊変数
特殊変数 | GNU Make | nmake |
---|
$@ | ターゲット | ターゲット |
$< | 依存の1番目 | ターゲットより新しい依存(通常のルールでは使えない / サフィックスルールのみ?) |
$? | ターゲットより新しい依存 | ターゲットより新しい依存 |
$^ | 全ての依存(直接の) | |
$+ | 全ての依存(直接の) | |
$* | % に一致した箇所 | |
シェルに変数を渡す
$$VAR
GNU make
ターゲットに合わせて変数を定義
test: TEST=1
test: test.obj
OSによって分岐
OS = ${shell uname}
ifeq (${OS}, Linux)
# Linuxなほげほげ
endif
ソースの取得
SRCS = ${shell find ${SRCDIR} -name '*.c'}
ソースからオブジェクトの一覧を取得
OBJS = ${patsubst ${SRCDIR}/%.c, ${OBJDIR}/%.o, ${SRCS}}
ソースからオブジェクトを生成するルール
${OBJDIR}/%.o: ${SRCDIR}/%.c
@mkdir -p ${dir $@}
${CC} ${CFLAGS} -c -o $@ $<
# ver D
#
# $* は % にマッチしたstem
# ${OBJEXT} は .obj or .o
${OBJDIR}/%${OBJEXT}: ${SRCDIR}/%.d
@mkdir -p ${dir $@}
${DMD} ${DFLAGS} -c -of$*${OBJEXT} -od${OBJDIR} $<
依存関係などの省力化
# Makefileの一部を生成する
# #includeから生成した依存関係が書かれたファイル
# gcc -M の出力を加工したもの
include ${patsubst ${SRCDIR}/%.c, ${DEPDIR}/%.makefile, ${SRCS}}
${DEPDIR}/%.makefile: ${SRCDIR}/%.c
@mkdir -p ${DEPDIR}
@set -e; gcc -M $< \
| sed 's/${OBJDIR}\/$*\.o[ :]/$*.o $@ : /g' > $@; \
[ -s $@ ] || rm -f $@
@echo generate $@
依存関係解決ファイルの作成 ver2
# -MMによりシステムのヘッダを出力しなくなる
# -MTによりいちいちsedを通さなくて良くなる
# %の前にディレクトリを指定したりできる
include ${patsubst ${SRCDIR}/%.c, ${DEPDIR}/%.makefile, ${SRCS}}
${DEPDIR}/%.makefile: ${SRCDIR}/%.c
@mkdir -p ${DEPDIR}
@set -e; \
gcc -MM -MT '${OBJDIR}/$*.o $@' $< > $@; \
[ -s $@ ] || rm -f $@
@echo generate $@
絶対パス取得
ABS_TMPDIR = ${shell pwd}/${TMPDIR}