以下为通用代码,只需修改目标文件名即可
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