2007年7月4日 星期三

makefile example


ROOTDIR = ..
include $(ROOTDIR)/config/linux.mak

MODULE = XMLTool
MODULE_LIB = xmltool

ifdef BUILD_SO
ifeq ($(BUILD_SO), true)
LIBNAME = lib$(MODULE_LIB).so
CFLAGS += -fPIC
LFLAGS = -shared -Wl,-soname,$(LIBNAME)
else
LIBNAME = lib$(MODULE_LIB).a
endif
endif

DEPENDENT_MODULES = $(ROOTDIR)/Locker

CFLAGS += -I$(ROOTDIR)/$(MODULE)/include
CFLAGS += `xml2-config --cflags`
CFLAGS += -I$(ROOTDIR)/Locker/include
LDFLAGS += -L$(ROOTDIR)/$(MODULE)/lib -L$(ROOTDIR)/$(MODULE)/release/
LDFLAGS += -L$(DEPENDENT_MODULES)/release/
LDFLAGS += -lstdc++ -lpthread -luuid -llocker
LDFLAGS += `xml2-config --libs`


OBJS += XML.o

MAIN_OBJ =
EXE =

OBJS_SRC = $(addprefix src/,$(OBJS))
MAIN_OBJ_SRC = $(addprefix src/,$(MAIN_OBJ))
LIBNAME_RELEASE = $(addprefix release/,$(LIBNAME))
EXE_RELEASE = $(addprefix release/,$(EXE))

TEST_OBJ = test.o
TEST_EXE = test/test
TEST_OBJ_TST = $(addprefix test/,$(TEST_OBJ))

all: dependent_module $(LIBNAME_RELEASE) $(EXE_RELEASE) $(TEST_EXE)
@echo "Please export LD_LIBRARY_PATH..."
@echo "e.g. export LD_LIBRARY_PATH=`pwd`/release"


dependent_module:
@for modules in $(DEPENDENT_MODULES); do \
make -C $$modules; \
done;

$(LIBNAME_RELEASE): $(OBJS_SRC)
@if [ "$$BUILD_SO" == "true" ]; then \
$(LINK) $(LFLAGS) -o $(LIBNAME_RELEASE) $^ ;\
else \
$(LD) -r -o $(LIBNAME_RELEASE) $^ ;\
fi

$(EXE_RELEASE): $(LIBNAME_RELEASE) $(MAIN_OBJ_SRC)
$(C++) -o $@ $(MAIN_OBJ_SRC) $(LDFLAGS) -l$(MODULE_LIB)

$(TEST_EXE): $(LIBNAME_RELEASE) $(TEST_OBJ_TST)
$(CC) -o $@ $(TEST_OBJ_TST) $(LDFLAGS) -l$(MODULE_LIB)

.cpp.o:
$(C++) -c $< -o $(patsubst %.cpp,%.o,$<) $(CFLAGS)

.c.o:
$(CC) -c $< -o $(patsubst %.cpp,%.o,$<) $(CFLAGS)

clean:
$(RM) $(LIBNAME_RELEASE) $(EXE_RELEASE) $(OBJS_SRC) $(MAIN_OBJ_SRC)
$(RM) $(TEST_OBJ_TST) $(TEST_EXE) test/output*

沒有留言:

網誌存檔

關於我自己