假设目前我有3个源文件
a.cpp b.cpp c.cpp
我通过以下语句编译出了3个目标文件 a.o/b.o/c.o
$(CXX) $(CXXFLAGS) $(main_lib_cpp) -c $<
现在问题是怎么写一个目标:规则,实现链接出a.so b.so c.so
假设目前我有3个源文件
a.cpp b.cpp c.cpp
我通过以下语句编译出了3个目标文件 a.o/b.o/c.o
$(CXX) $(CXXFLAGS) $(main_lib_cpp) -c $<
现在问题是怎么写一个目标:规则,实现链接出a.so b.so c.so
参考如下:
#编译TARGET动态库
CXX=g++
CXXDYNA=-g -lpthread $(LIB) -fPIC
CXXFLAGS=-g -lpthread $(INCLUDE) -fPIC
#添加头文件路径
INCLUDE=-I./ -I/data/include
#添加动态库,这里的例子是libnettrans.so
LIB=-L/data/lib -lnettrans
#中间文件,如果a.so只需要a.o,那么就把这句话写到每一个TARGET前面
OBJECTS=a.o b.o c.o
#生成 a.so
TARGET=./a.so
$(TARGET):$(OBJECTS)
$(CXX) -shared -o $(TARGET) $(OBJECTS) $(CXXDYNA)
$(OBJECTS):%.o:%.cpp
$(CXX) -c $(@F:.o=.cpp) -o $@ $(CXXFLAGS)
#生成 b.so
TARGET=./a.so
$(TARGET):$(OBJECTS)
$(CXX) -shared -o $(TARGET) $(OBJECTS) $(CXXDYNA)
$(OBJECTS):%.o:%.cpp
$(CXX) -c $(@F:.o=.cpp) -o $@ $(CXXFLAGS)
#生成 c.so
TARGET=./a.so
$(TARGET):$(OBJECTS)
$(CXX) -shared -o $(TARGET) $(OBJECTS) $(CXXDYNA)
$(OBJECTS):%.o:%.cpp
$(CXX) -c $(@F:.o=.cpp) -o $@ $(CXXFLAGS)
clean:
rm -f $(OBJECTS) $(TARGET)