自留地之:我的Makefile

lyjinger自留地之:我的Makefile

说明:自己平常学习linux c语言编程所编写的一个Makefile,放出来透透气。
分为两部分:
  rule.Makefile是编译的公共规则,放置在自己的主目录下;
  Makefile是编译选项,放置在需要编译的代码目录下。
  个人觉得应该还是挺简单易懂的,如果有些地方不明白的话可以参考“读书笔记之:GNU make中文手册”。
如果有兴趣可以下载:
rule.Makefile:
    http://pickup.mofile.com/7947921225125732
Makefile:
    http://pickup.mofile.com/4964945184125783
 

################################################################################
# lyjinger的rule.Makefile说明:
# 作者:lyjinger email:lyjinger@gmail.com
#
# 1,默认加载./,./inc作为头文件目录
#   默认加载./,./lib作为库文件目录
#
# 2,默认交叉编译变量CROSS为空
#   默认使用gcc,g++,ar,ld,objcopy作为c编译器,c++编译器,打包器,链接器,反汇编器
#
# 3,默认编译当前目录下所有后缀为.c的文件并生成对应.o文件
#   默认生成可执行文件test
#   默认使用build.log作为编译日志记录文件
#
# 4,对$TARGET后缀为.so的执行编译(gcc -fPIC -shared)生成动态链接库
#   对$TARGET后缀为.a的执行打包(ar -rc)生成静态链接库
#   对其余的执行编译(gcc -o)生成可执行文件
#
# 5,默认删除动作将删除对象文件,目标文件,日志文件,临时文件
#
# 6,请将rule.Makefile拷贝至$HOME目录下,配合Makefile来使用
#
################################################################################

CUR_DIR := $(shell pwd)
INC    += -I$(CUR_DIR) /
       -I$(CUR_DIR)/inc
LIB    += -L$(CUR_DIR) /
       -L$(CUR_DIR)/lib

CC    := $(CROSS)gcc
CXX    := $(CROSS)g++
AR    := $(CROSS)ar
LD    := $(CROSS)ld
OBJCOPY    := $(CROSS)objcopy

CFLAGS    += $(INC)
CXXFLAGS+= $(INC)
LDFLAGS    += $(LIB)

SRCS    ?= $(wildcard *.c)
OBJS    := $(addsuffix .o, $(basename $(SRCS)))

LOGFILE    := build.log
TARGET    ?= test


.PHONY:all
all:$(TARGET)

$(TARGET): $(OBJS)
ifeq ($(suffix $(TARGET)), .so)
    $(CC) -fPIC -shared -o $@ $^ >>$(LOGFILE) 2>&1
else
    ifeq ($(suffix $(TARGET)), .a)
        $(AR) -rc $@ $^ >>$(LOGFILE) 2>&1
    else
        $(CC) -o $@ $^ $(LDFLAGS) >>$(LOGFILE) 2>&1
    endif
endif

%.o:%.c   
    $(CC) -c $(CFLAGS) $< >>$(LOGFILE) 2>&1


.PHONY:clean
clean:
    $(RM) $(OBJS) $(TARGET) $(LOGFILE) *.core *~ .*.swp


################################################################################
# lyjinger的makefile说明:
# 作者:lyjinger email:lyjinger@gmail.com
#
# 1,请先参考lyjinger的rule.Makefile说明
#
# 2,INC变量设置需要加载的头文件目录,格式:-I[inc-path1] -I[inc-path2] ...
#   LIB变量设置需要加载的库文件目录,格式:-L[lib-path1] -L[lib-path2] ...
#
# 3,CFLAGS变量设置c编译选项
#   CXXFLAGS变量设置c++编译选项
#   LDFLAGS变量设置链接选项,需要加载的库在此处指出,格式:-l[lib1] -l[lib2] ...
#
# 4,SRCS变量设置需要编译的源文件,默认/注释掉的情况下编译当前目录所有.c文件
#   TARGET变量设置make的目标文件,默认/注释掉的情况下生成test可执行文件
#
################################################################################

INC    :=
LIB    :=

CFLAGS    := -g -Wall -pedantic
CXXFLAGS:=
LDFLAGS :=

#SRCS    := $(wildcard *.c)
#TARGET    := test

include $(HOME)/rule.Makefile

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值