siebenschlaefer
4/29/2015 - 5:16 PM

simple Makefile template

simple Makefile template

CXX       = g++
CXXFLAGS += -Wall -Wextra
CPPFLAGS +=
LDFLAGS  +=
LDLIBS   +=

PROGRAMS =
LIBRARIES =

all: $(LIBRARIES) $(PROGRAMS)

check: all

#example: example.o obj2.o

$(LIBRARIES): %.a:
	ar -rv $@ $^
	ranlib $@

$(PROGRAMS): %: %.o
	$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)

%.o: %.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<

%.o: %.cc
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

%.o: %.cxx
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

%.o: %.C
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

%: %.rl
	ragel -o $@ $<

.PHONY: all check clean
clean:
	rm -f $(PROGRAMS) core *.o .*.dep

.%.dep: %.c
	@$(CC)  $(CFLAGS)   -M $(CPPFLAGS) $< > $@

.%.dep: %.cc
	@$(CXX) $(CXXFLAGS) -M $(CPPFLAGS) $< > $@

.%.dep: %.cpp
	@$(CXX) $(CXXFLAGS) -M $(CPPFLAGS) $< > $@

.%.dep: %.cxx
	@$(CXX) $(CXXFLAGS) -M $(CPPFLAGS) $< > $@

.%.dep: %.C
	@$(CXX) $(CXXFLAGS) -M $(CPPFLAGS) $< > $@

-include $(patsubst   %.c,.%.dep, $(wildcard   *.c))
-include $(patsubst  %.cc,.%.dep, $(wildcard  *.cc))
-include $(patsubst %.cpp,.%.dep, $(wildcard *.cpp))
-include $(patsubst %.cxx,.%.dep, $(wildcard *.cxx))
-include $(patsubst   %.C,.%.dep, $(wildcard   *.C))