# A simple Makefile! # # The Makefile just compiles all C source and CPP source file # in current directory, but your can modify and extend the it. # Any problem please email me! # # Author: galen # Email: galen.gang.liu@gmail.com # 26-Mar-2010 TARGET := simple # << your executable name >> CC = gcc CXX = g++ CCFLAGS = -g -O2 -Wall -Werror CXXFLAGS = -g -O2 -Wall -Werror LDFLAGS = LIBS = -lcppunit -ldl # <<using library that you need >> # $(wildcard pattern...) # http://www.gnu.org/software/make/manual/make.html#Wildcard-Function # We using the wildcard function to get a list of all the # C source and CPP source files in current directory. SOURCES = $(wildcard *.c *.cpp) # $(patsubst pattern,replacement,text) # http://www.gnu.org/software/make/manual/make.html#Text-Functions # We using the patsubst function applies a pattern to every word # in a list of words(actually, text is consisted of words), # and performs a simple textual substitution. OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(SOURCES))) all: ${TARGET} ${TARGET}: ${OBJS} ${CXX} ${LDFLAGS} -o $@ $^ ${LIBS} # << if your source is c language, using CC instead of CXX >> %.o: %.c # << compile c language >> ${CC} ${CFLAGS} -c $< %.o: %.cpp # << compile c++ language >> ${CXX} ${CXXFLAGS} -c $< .PHONY: all clean distclean clean: -rm -f *~ *.o ${TARGET} distclean: clean Each action must be indented with at least one space (traditional make requires a tab character) TARGET := test CC = g++ CFLAGS = -g -O2 -Wall -Werror LDFLAGS = LIBS = -lm SRCS = $(wildcard *.cpp) OBJS = $(patsubst %.cpp, %.o, $(SRCS)) all : ${TARGET} ${TARGET} : ${OBJS} ${CC} ${LDFLAGS} $^ -o $@ ${LIBS} %.o : %.cpp ${CC} ${CFLAGS} -c $< .PHONY: all clean distclean clean: -rm -f *o ${TARGET} distclean: clean env: @echo "SRCS = ${SRCS}" @echo "OBJS = ${OBJS}"