通用makefile

#Realize a common app makefile
#include(目录)
#lib(目录)
#source(目录)
#Makefile

#开发调试过程可能产生多个程序版本,可以在目标文件后(前)增加版本号标识。
VERSION  =1.00	
#Linux下为gcc/g++;arm下为arm-linux-gcc;不同CPU厂商提供的定制交叉编译器名称可能不同,如Hisilicon“arm-hisiv300-linux-gcc”。  CC = gcc
CC   =gcc	
#开发过程,特殊代码一般增加宏条件来选择是否编译,如调试打印输出代码。-D是标识,后面接着的是“宏”。  DEBUG =-DUSE_DEBUG
DEBUG   =-DUSE_DEBUG		
#可以指定编译条件,如显示警告(-Wall),优化等级(-O)。																		
CFLAGS  =-Wall
#指定源文件目的路径,利用“wildcard”获取路径下所有依赖源文件。
SOURCES   =$(wildcard ./source/*.c)					
#包含依赖的头文件,包括源码文件和库文件的头文件。												
INCLUDES   =-I./include
#指定库文件名称,库文件有固定格式,静态库为libxxx.a;动态库为libxxx.so,指定库文件名称只需写“xxx”部分,
LIB_NAMES  =-lfun_a1.0 -lfun_so1.0
#指定依赖库文件的存放路径。注意如果引用的是动态库,动态库也许拷贝到“/lib”或者“/usr/lib”目录下,执行应用程序时,系统默认在该文件下索引动态库。
LIB_PATH  =-L./lib
#调用“patsubst”将源文件(.c)编译为目标文件(.o)。
OBJ   =$(patsubst %.c, %.o, $(SOURCES))
#执行文件名称
TARGET  =app
#links
$(TARGET):$(OBJ)
	@mkdir -p out
	$(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) -o out/$(TARGET)$(VERSION)
	@rm -rf $(OBJ)
 
#compile
%.o: %.c
	$(CC) $(INCLUDES) $(DEBUG) -c $(CFLAGS) $< -o $@

 #清除编译信息
.PHONY:clean
clean:
	@echo "Remove linked and compiled files......"
	rm -rf $(OBJ) $(TARGET) out
#Realize a .so makefile
#.h .c
#Makefile
VERSION   	=1.0
CC        	=gcc
DEBUG     	=
CFLAGS    	=-fPIC -shared 
LFLAGS   	=-fPIC -shared 
SOURCES   	=$(wildcard *.c)
INCLUDES  	=-I.
LIB_NAMES 	=
LIB_PATH  	=
OBJ       	=$(patsubst %.c, %.o, $(SOURCES))
TARGET    	=libfun_so
 
#link
$(TARGET):$(OBJ)
	@mkdir -p out
	$(CC) $(OBJ) $(LIB_PATH) $(LIB_NAMES) $(LFLAGS) -o out/$(TARGET)$(VERSION).so
	@rm -rf $(OBJ)
 
#compile
%.o: %.c
	$(CC) $(INCLUDES) $(DEBUG) -c $(CFLAGS) $< -o $@
 
.PHONY:clean
clean:
	@echo "Remove linked and compiled files......"
	rm -rf $(OBJ) $(TARGET) out
#Realize a .a makefile
#.h .c
#Makefile
VERSION     =1.0
CC          =gcc
DEBUG   	=
CFLAGS  	=-Wall
AR   		=ar
ARFLAGS     =rv
SOURCES   	=$(wildcard *.c)
INCLUDES    =-I.
LIB_NAMES   =
LIB_PATH  	=
OBJ         =$(patsubst %.c, %.o, $(SOURCES))
TARGET      =libfun_a
 
#link
$(TARGET):$(OBJ)
	@mkdir -p out
	$(AR) $(ARFLAGS) out/$(TARGET)$(VERSION).a $(OBJ)
	@rm -rf $(OBJ)
 
#compile
%.o: %.c
	$(CC) $(INCLUDES) $(DEBUG) -c $(CFLAGS) $< -o $@
  
.PHONY:clean
clean:
	@echo "Remove linked and compiled files......"
	rm -rf $(OBJ) $(TARGET) out
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值