1、动态库和静态库
LIB_NAME = libtest
PROJECT_ROOT_PATH = /MyProject
TARGET_SO = true
#TARGET_AR = true
ifdef TARGET_SO
TARGET = $(LIB_NAME).so
endif
ifdef TARGET_AR
TARGET = $(LIB_NAME).a
endif
CC = gcc
CXX = g++
AR = ar
ARFLAGS = -rcv
SOFLAGS = -fPIC -shared
INCPATH = -I.
LDFLAGS = -L.
LIBS =
CXXFLAGS = -w -g $(INCPATH)
OBJS = libtest.o
$(TARGET) : $(OBJS)
ifdef TARGET_SO
$(CXX) $(SOFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
endif
ifdef TARGET_AR
$(AR) $(ARFLAGS) $@ $^
endif
.PHONY : clean
clean :
-rm -rf $(OBJS) $(TARGET)
-rm -rf $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
.PHONY : install
install :
cp $(TARGET) $(PROJECT_ROOT_PATH)/lib
mkdir -p $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
cp *.h $(PROJECT_ROOT_PATH)/include/$(LIB_NAME)
2、可执行文件
EXE_NAME = test
PROJECT_ROOT_PATH = /MyProject
CC = gcc
CXX = g++
INCPATH = -I../include -I$(PROJECT_ROOT_PATH)/include
LDFLAGS = -L$(PROJECT_ROOT_PATH)/lib #链接库路径
LIBS = -ltest #链接库名称
CXXFLAGS = -g -Wall -DDEBUG -D_REENTRANT $(INCPATH) #编译器选项
OBJS = test.o
$(EXE_NAME) : $(OBJS)
$(CXX) -o $@ $^ $(LDFLAGS) $(LIBS)
.PHONY : clean
clean :
-rm -rf $(OBJS) $(EXE_NAME)
.PHONY : install
install :
cp $(EXE_NAME) $(PROJECT_ROOT_PATH)/bin