Makefile

Top / Makefile

変数上書き

make VAR=VALUE

makedepend

Makefileを書き換えるツール。 Makefileは改行で終わっていないと困ったことになるので注意。

$ makedepend sourcefiles

特殊変数

特殊変数GNU Makenmake
$@ターゲットターゲット
$<依存の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}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-10-13 (木) 19:52:54 (6763d)