- 追加された行はこの色です。
- 削除された行はこの色です。
// *Makefile
#contents
* 変数上書き
Makefileではなくmakeネタだが気にしない
make VAR=VALUE
そんだけ
* makedepend
Makefileを書き換えるツール。
Makefileは改行で終わっていないと困ったことになるので注意。
$ makedepend sourcefiles
* GNUmake
* GNU make
# 依存関係などの省力化
#
# カレントディレクトリに含まれる .c ファイルだけ .o を作成
# また .makefileというMakefile(の一部)を生成する
** 依存関係などの省力化
# Makefileの一部を生成する
# #includeから生成した依存関係が書かれたファイル
# gcc -M の出力を加工したもの
SOURCES = $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)
all: ${OBJECTS}
include $(OBJECTS:.o=.makefile)
%.makefile: %.c
set -e; gcc -M $< \
| sed 's/$*\.o[ :]/$*.o $@ : /g' > $@; \
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
#
** 依存関係解決ファイルの作成 ver2
# -MMによりシステムのヘッダを出力しなくなる
# -MTによりいちいちsedを通さなくて良くなる
# %の前にディレクトリを指定したりできる
#
# basename: 拡張子除去
# notdir: パスのディレクトリ部分除去
include ${addprefix ${DEPDIR}/, ${addsuffix .makefile, ${basename ${notdir ${wildcard ${SRCDIR}/*.cpp}}}}}
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 $@
** 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} $<