Makefile工程管理

     使用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上班中...
愿明年来找份好工作........


   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值