Linux编译.so模板

# 目标文件名
TARGET := libMyMath.so

# 生成的目标所放置的位置
TARGET_PATH :=../ 

# 编译参数
CC      := g++

# 依赖库名称,如:LIBS=-lpthread
LIBS    := 

# 指定依赖库位置,多个引用库之间以空格分开, 如: LDFLAGS=-L/usr/lib -L/xxx/lib
LDFLAGS := 

# 向代码提供宏定义, 一般代码这样使用:
# #ifdef XXXX 
# ...
# #endif
# 宏定义有2种方式: (1) -D DEFINE1  (2) -D DEFINE2=1000
# 多个宏定义以空格分开, 如: DEFINES=-DGT60 -DISANDROID=1
DEFINES :=

# 依赖头文件路径(当前路径: I.), 多个路径以空格分开, 如: INCLUDES=-I/usr/include -I/path/include 
INCLUDES := -I.

# -O0:表示编译时没有优化
# -O1:表示编译时使用默认优化
# -O2:表示编译时使用二级优化
# -O3:表示编译时使用最高级优化
# -Os: 优化代码大小,其使能了-O2的所有选项,相当于-O2.5
CFLAGS  := -g -Wall -O3 -std=c++11 $(DEFINES) $(INCLUDES)
CXXFLAGS:= $(CFLAGS)

# VPATH告诉编译器当前目录和指定目录都按照当前规则编译
VPATH = . ./subdir

# 自动查找所有.c和.cpp文件,并将目标定义为同名.o文件
# wildcard得到当前目录(./)和其子目录下的所有后缀为.cpp文件
# 如果还有目录则再增加一个wildcard, 比如当前目录下还有一个子目录XXX,如: SOURCE := $(wildcard *.cpp) $(wildcard XXX/*.cpp)
SOURCE   := $(wildcard *.cpp) $(wildcard subdir/*.cpp)

# notdir去除路径得到文件名
SRC_WITHOUTDIR:= $(notdir $(SOURCE))

# patsubst把.c及.cpp替换成同名.o, 如果手动写.o则不需要SOURCE, 如: OBJS = MyMath.o TestLib.o
OBJS     := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SRC_WITHOUTDIR)))

# 显示SOURCE, SRC_WITHOUTDIR, OBJS的值
#OUT:
#	@echo $(SOURCE)
#	@echo $(SRC_WITHOUTDIR)
#	@echo $(OBJS)

# -shared: 编译成动态库
$(TARGET) : $(OBJS)
	$(CC) -shared -o $@ $(OBJS) $(LDFLAGS) $(INCLUDES)

ifeq ($(TARGET_PATH),)
# 如果未设置目标路径则不拷贝(目标所在路径为当前目录)
else
# 把.so文件拷贝到指定目录种
	cp $(TARGET) $(TARGET_PATH)
endif

%.o : %.cpp
# -fPIC: 告诉编译器产生与位置无关代码(Position-Independent Code)
	$(CC) $(CXXFLAGS) -fpic -c $< -o $@ $(LDFLAGS) $(LIBS)

.PHONY : clean
clean:
	rm -f *.o
	rm -f $(TARGET)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneOnce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值