makefile模板文件

本文提供编译动态库和静态库的Makefile模板,以及处理多个.c文件生成单一目标的Makefile示例,适用于C语言项目的构建和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译动态库的makefile模板文件:

#生成动态库的模板makefile
CC = gcc
CFLAGS = -Wall -O2
#指定头文件目录
INCLUDE_PATH = -I../include 
#指定链接库所在目录
LINKLIB_PATH = 
#指定要链接的库文件
LIBS = 
LIBCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
LIBSRCS := $(wildcard *.c)
LIBOBJS := $(patsubst %.c,%.o,$(LIBSRCS))
#编译生成的库文件名
BASENAME = libcmtools
LIBRARY = $(BASENAME).so.1.0.0
SONAME = $(BASENAME).so.1
LIBNAME = $(BASENAME).so
#目标生成的库文件名
APPLIB = cmtools
APPLIBSO = $(APPLIB).so
#目标库文件生成的目录
APPLIBDIR = ../lib
APPLIBNAME = lib$(APPLIBSO)
all:$(LIBRARY)
#直接注释下面两行的话,意味着不会目标生成的库文件
#	cp $(LIBNAME) $(APPLIBDIR)/$(APPLIBNAME)
#	cp $(LIBNAME) $(APPLIBDIR)/$(APPLIBSO)
$(LIBRARY):$(LIBOBJS)
	$(CC) -shared -W1,-soname,$(SONAME) $(LIBOBJS) -o $@
	ln -sf $@ $(LIBNAME)
	ln -sf $@ $(SONAME)
$(LIBOBJS):%.o:%.c
	$(CC) $(LIBCFLAGS) -c $< -o $@
.PHONY:clean distclean
clean:
	rm -f $(LIBOBJS)
distclean:
	rm -f $(LIBOBJS) $(LIBRARY) $(SONAME) $(LIBNAME) $(APPLIBDIR)/$(APPLIBNAME) $(APPLIBDIR)/$(APPLIBSO)

编译静态库makefile模板:

#目标库文件名
LIBA = libcmtools.a  
AR = ar  
CC = gcc
CFLAGS = -Wall -O2
#指定头文件目录
INCLUDE_PATH = -I../include 
#指定链接库所在目录
LINKLIB_PATH = 
#指定要链接的库文件
LIBS = 
ALLCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
COMPILE = $(CC) $(ALLFLAGS) -c  
SRCS := $(wildcard *.c)  
OBJS := $(patsubst %.c,%.o,$(SRCS))  
all:$(LIBA)  
$(LIBA):$(OBJS)  
	$(AR) cqs $(LIBA) $(OBJS)  
%.o:%.c   
	$(COMPILE) $< -o $@  
.PHONY:clean distclean  
clean:  
	rm -f $(OBJS)  	
distclean:  	
	rm -f $(OBJS) $(LIBA)  

同时编译多目标文件,这个也是经常用到,比如:编译测试代码,可能会同时生产很多目标

#不是特别规范的模板
CC = gcc
CFLAGS = -Wall -O2 -Xlinker -zmuldefs
#指定头文件目录
INCLUDE_PATH = -I../include 
#指定链接库所在目录
LINKLIB_PATH = -L../src
#指定要链接的库文件
LIBS = -lcmtools
LIBCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
#LIBSRCS := $(wildcard *.c)
#LIBOBJS := $(patsubst %.c,%.o,$(LIBSRCS))
all:
#把需要生成的目标在此加入即可
	gcc t_hash.c -o t_hash $(LIBCFLAGS)
	gcc t_heap.c -o t_heap $(LIBCFLAGS)
.PHONY:clean distclean
clean:
#注意把新加入的目标加入到clean列表
	rm -rf *.o t_hash t_heap

多个.c文件文件生成一个目标模板makefile:

APP = app  
CC = gcc  
CPPFLAGS =
LDFLAGS =
#指定头文件目录
INCLUDE_PATH =
#指定链接库所在目录
LINKLIB_PATH =
#指定要链接的库文件
LIBS =
CFLAGS = -Wall -ggdb3  
COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -c  
LINKCC = $(CC) $(LDFLAGS)
SRCS := $(wildcard *.c)  
#DEPS := $(patsubst %.c,%.d,$(SRCS))  
OBJS := $(patsubst %.c,%.o,$(SRCS))  
all:$(APP)  
$(APP):$(OBJS)
		  $(LINKCC) $(OBJS) -o $(APP)  
#%.d:%.c  
#		 $(CC) -MM $(CPPFLAGS) $< > $@  
%.o:%.c  
		 $(COMPILE) $< -o $@  
.PHONY:clean  
clean:  
		rm -f $(OBJS) $(APP)  
explain:  
	@echo "The information represents in the program:"  
	@echo "Final executable name: $(APP)"  
	@echo "Source files: $(SRCS)"  
	@echo "Object files: $(OBJS)"  
depend:$(DEPS)  
	@echo "Dependencies are now up-to-date"  
-include $(DEPS)  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值