-mxxと-Oxをターゲットに指定したいときのMakefile
32/64bitと最適化オプションをターゲットにmakeするときのMakefile.
こんな感じで良いのかなぁ.泥臭いな.
Makefile
DIR_SRC=./src DIR_HDR=./include DIR_BIN=. m32o0suf = m32o0 m32o1suf = m32o1 m32o2suf = m32o2 m64o0suf = m64o0 m64o1suf = m64o1 m64o2suf = m64o2 INCLUDES = -I${DIR_HDR} CFLAGS_m32o0 = -m32 -O0 -g CFLAGS_m32o1 = -m32 -O1 CFLAGS_m32o2 = -m32 -O2 CFLAGS_m64o0 = -m64 -O0 -g CFLAGS_m64o1 = -m64 -O1 CFLAGS_m64o2 = -m64 -O2 BIN_m32o0 = ${DIR_BIN}/bin.${m32o0suf} BIN_m32o1 = ${DIR_BIN}/bin.${m32o1suf} BIN_m32o2 = ${DIR_BIN}/bin.${m32o2suf} BIN_m64o0 = ${DIR_BIN}/bin.${m64o0suf} BIN_m64o1 = ${DIR_BIN}/bin.${m64o1suf} BIN_m64o2 = ${DIR_BIN}/bin.${m64o2suf} HDR = ${DIR_HDR}/header.h SRC = ${DIR_SRC}/src.c OBJ_m32o0 = ${DIR_SRC}/src.${m32o0suf} OBJ_m32o1 = ${DIR_SRC}/src.${m32o1suf} OBJ_m32o2 = ${DIR_SRC}/src.${m32o2suf} OBJ_m64o0 = ${DIR_SRC}/src.${m64o0suf} OBJ_m64o1 = ${DIR_SRC}/src.${m64o1suf} OBJ_m64o2 = ${DIR_SRC}/src.${m64o2suf} ALL_OBJ = \ ${OBJ_m32o0} ${OBJ_m32o1} ${OBJ_m32o2} \ ${OBJ_m64o0} ${OBJ_m64o1} ${OBJ_m64o2} .SUFFIXES: .c .${m32o0suf} .${m32o1suf} .${m32o2suf} .${m64o0suf} .${m64o1suf} .${m64o2suf} .c.${m32o0suf}: gcc ${INCLUDES} ${CFLAGS_m32o0} -c -o $@ $< .c.${m32o1suf}: gcc ${INCLUDES} ${CFLAGS_m32o1} -c -o $@ $< .c.${m32o2suf}: gcc ${INCLUDES} ${CFLAGS_m32o2} -c -o $@ $< .c.${m64o0suf}: gcc ${INCLUDES} ${CFLAGS_m64o0} -c -o $@ $< .c.${m64o1suf}: gcc ${INCLUDES} ${CFLAGS_m64o1} -c -o $@ $< .c.${m64o2suf}: gcc ${INCLUDES} ${CFLAGS_m64o2} -c -o $@ $< ${OBJ_m32o0}: ${SRC} ${HDR} ${OBJ_m32o0}: ${SRC} ${HDR} ${OBJ_m32o0}: ${SRC} ${HDR} ${OBJ_m64o0}: ${SRC} ${HDR} ${OBJ_m64o1}: ${SRC} ${HDR} ${OBJ_m64o2}: ${SRC} ${HDR} ${m32o0suf}:${OBJ_m32o0} gcc ${INCLUDES} $^ ${CFLAGS_m32o0} -o ${BIN_m32o0} ${m32o1suf}:${OBJ_m32o1} gcc ${INCLUDES} $^ ${CFLAGS_m32o1} -o ${BIN_m32o1} ${m32o2suf}:${OBJ_m32o2} gcc ${INCLUDES} $^ ${CFLAGS_m32o2} -o ${BIN_m32o2} ${m64o0suf}:${OBJ_m64o0} gcc ${INCLUDES} $^ ${CFLAGS_m64o0} -o ${BIN_m64o0} ${m64o1suf}:${OBJ_m64o1} gcc ${INCLUDES} $^ ${CFLAGS_m64o1} -o ${BIN_m64o1} ${m64o2suf}:${OBJ_m64o2} gcc ${INCLUDES} $^ ${CFLAGS_m64o2} -o ${BIN_m64o2} clean: rm -rf ${ALL_OBJ}
例
めいくする
$ make m32o1 gcc -I./include -m32 -O1 -c -o src/src.m32o1 src/src.c gcc -I./include src/src.m32o1 -m32 -O1 -o ./bin.m32o0
かくにんする
$ file bin.m32o1 bin.m32o1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xhogehoge, not stripped