Makefile通用编译动态库文件

以下为通用代码,只需修改目标文件名即可

CXX = g++
TARGET = libtinyxml.so
#查找所有目录下所有cpp文件
SOURCES :=  $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)

$(TARGET):$(OBJECTS)
	$(CXX) -o $(TARGET) $(OBJECTS) -shared
.cpp.o:
	$(CXX) -o $@ -c $< -fPIC
clean:
	rm -rf $(OBJECTS)
	rm -f $(TARGET)

查找当前目录下所有源文件

SOURCES :=  $(wildcard *.cpp)

编译库:必备的编译条件 : -shared

	$(CXX) -o $(TARGET) $(OBJECTS) -shared

编译.o文件 : 自动推导依赖头文件 : .cpp.o:
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code)
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.从GCC来看,shared应该是包含fPIC选项的,但似乎不是所以系统都支持,所以最好显式加上fPIC选项.

.cpp.o:
	$(CXX) -o $@ -c $< -fPIC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值