自定义makefile

随着技术的不断积累,发现有很多知识有必要分享一下,在此先分享一下Makefile的使用:

(一)单独模块的makefile

该Makefile是我在使用的过程中逐渐积累下来的,相当于一个小的模块的Makefile,可以直接生成一个.so或.a文件

# $< 第一个依赖文件
# $@ 目标文件
# $^ 所有依赖文件

#定义gcc
CC := gcc
LD := gcc
MKDIR:=mkdir

#定义各个目录
IDIR=include
ODIR=obj
LDIR=lib
SRCDIR=src

#定义各个flags
CCFLAGS = -g 
CCFLAGS += -I$(IDIR)
#CCFLAGS += -I ../include
#CCFLAGS += -I ../../include
CCFLAGS += -std=c99
CCFLAGS += -Wall 
CCFLAGS += -fPIC
CCFLAGS += -D _OS_LINUX_ 

LDFLAGS := -lpthread -lm

#定义目标文件
_OBJ+=hsc.o
_OBJ+=skt.o

OBJ=$(patsubst %, $(ODIR)/%, $(_OBJ))

#定义lib文件
#_LIB=libskt.a
#LIB=$(patsubst %, $(LDIR)/%, $(_LIB))
#_SO_LIB=libskt.so
#SO_LIB=$(patsubst %, $(LDIR)/%, $(_SO_LIB))

.PHONY: all

all: create_dir $(LIB) $(SO_LIB)
	
#生成lib文件
$(LIB): $(OBJ)
	ar -rc $@ $^
$(SO_LIB):$(OBJ)
	ld -shared -o $@ $^

create_dir:
	@if test ! -d $(ODIR);\
	then\
		mkdir $(ODIR);\
	fi
	@if test ! -d $(LDIR);\
	then\
		mkdir $(LDIR);\
	fi

#生成目标文件
$(ODIR)/%.o: $(SRCDIR)/%.c $(DEPS)
	$(CC) -c -o $@ $<  $(CCFLAGS)

.PHONY: clean
clean:
	rm -rf $(ODIR) $(LDIR) 
(二)一个可执行程序的makefile:

该makefile相当简单,结果会生成两个可执行文件:server,client

CC=gcc
RM=rm

CFLAGS+=-D _OS_LINUX_
CFLAGS+= -I ../include
CFLAGS+= -Wall
CFLAGS+= -g

LDFLAGS+= -lpthread ../lib/libskt.so

BINARIES=
BINARIES+=server
BINARIES+=client

default: all

server: server.c
	$(CC) server.c -o server $(CFLAGS) $(LDFLAGS)

client: client.c
	$(CC) client.c -o client $(CFLAGS) $(LDFLAGS)

all: $(BINARIES)

clean:
	$(RM) -f *.o
	$(RM) -f $(BINARIES)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值