使用Makefile管理工程,可以编译出debug和release两个版本
目录树
第一级目录的Makefile:
ifndef CROSS_COMPILE
CC=gcc
AR=ar
LD=ld
endif
export CC AR LD
ROOTDIR=$(shell pwd)
CFG_INC+= -I$(ROOTDIR)/include -I$(ROOTDIR)/linklist/
CFG_LIB=
export ROOTDIR CFG_INC CFG_LIB
version=debug
ifeq ($(version), debug)
CFLAGS= -g -Wall
else
CFLAGS= -O2 -Wall
endif
export CFLAGS
ALL:
mkdir -p $(ROOTDIR)/obj/debug
mkdir -p $(ROOTDIR)/obj/release
make -C app
make -C linklist
ifeq ($(version), debug)
$(CC) $(ROOTDIR)/obj/debug/* -o app_debug
else
$(CC) $(ROOTDIR)/obj/release/* -o app_release
endif
clean:
-rm -rf app_*
-rm -rf obj/
-make -C app clean
-make -C linklist clean
app目录下的Makefile:
SRC_FILE=$(shell ls *.c)
ifeq ($(version), debug)
OBJ_FILE=$(patsubst %.c,%.o.debug,$(SRC_FILE))
else
OBJ_FILE=$(patsubst %.c,%.o.release, $(SRC_FILE))
endif
ALL: $(OBJ_FILE)
%.o.debug:%.c
$(CC) $(CFG_INC) $(CFG_LIB) $(CFLAGS) -c -o $@ $<
cp $@ $(ROOTDIR)/obj/debug
%.o.release:%.c
$(CC) $(CFG_INC) $(CFG_LIB) $(CFLAGS) -c -o $@ $<
cp $@ $(ROOTDIR)/obj/release
clean: -rm -rf *.o
-rm -rf *.o.debug
-rm -rf *.o.release
-rm -rf *.bak
默认为debug版本
# make
发布debug版本,编译带debug信息
# make version=debug
发布release版本,不带调试信息
# make version=release
eg:
-rm test/ #如果不存在test目录这条命令就会出错,由于其前加了“-”,表示忽略错误,因此可以继续执行下去
@rm test/ -rf #如果不加@,则在执行这行命令前,先打印这行命令
@RinStar,2013-12-10上班中...
愿明年来找份好工作........