makefile
# Generic Makefile -- it should appear in the same directory as the source files
# and we do not generate object files in a separate directory -- it's too much effort
# If you have a /src directory, put this file in there, and in the directory above, put something like
#
# SUBDIRS = src
#
# .PHONY : $(SUBDIRS)
#
# $(SUBDIRS) :
# make -j2 -C $@
BINDIR := ../bin/
#List all your binaries here -- CHANGE THIS
BIN := tester handletester cgiconv
#Binaries with directory prepended (ignore this)
DBIN := $(patsubst %, $(BINDIR)%, $(BIN))
#The first (and therefore default) rule -- compile all binaries listed above (can usually ignore this)
all : $(DBIN)
#List here each of the binaries we make, and on what object files they depend -- CHANGE THESE
# if there is just one binary, you can delete/comment out the other rules.
# Note that if a binary depends on X.c or X.cc or X.cpp, etc., list X.o
$(BINDIR)tester : context.o tester.o
$(BINDIR)handletester : handletester.o
$(BINDIR)cgiconv : bluecondb-msqlpp.o context.o cgiconv.o #cgicontext.o
#The libraries we want to link against (the linker is pretty good at figuring out what we actually need of these)
# (i.e. it will cut out the crud if we over-specify)
LIBS := -lm # -lSDLmain -lSDL -liberty -lGL -lGLU -lglut -lpng -lz #-lpthread -ldl -lccgnu2
#optimisations to use (you can tweak these, but probably don't need to)
OPTIM0 := -ggdb #debugging
OPTIM1 := -O2 #'safe' optimisations
OPTIM2 := -O3 -march=pentium4 -fomit-frame-pointer #keen optimisations, prolly safe on P4
#If you want to profile your code (with or without optimisations), you can ignore this
PROFILE := -fno-omit-frame-pointer -pg
#What compilation flags to use (note we separate from warnings for a cleaner compile command line)
# Pick your optimisations level here and optionally include $(PROFILE)
FLAGS := -ansi -pedantic -pipe $(OPTIM1)
#Use same flags at this point for C/C++ (warnings will be different though)
CFLAGS := $(FLAGS)
CXXFLAGS := $(FLAGS)
#Any non-standard includes go here
INCLUDES := #-I../include # -I/usr/include/mysql
#Pick our compilers
CC = gcc
CXX = g++
#If you are compiling C++ source, you will need to change this to g++
LN = gcc
#Include some non-default warnings, note that some only apply to C source
WARNINGS := -Wall -W -Wcast-qual -Wwrite-strings -Wno-long-long -Wshadow
CWARNINGS := $(WARNINGS) -Wmissing-declarations -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes
CXXWARNINGS := $(WARNINGS) -Woverloaded-virtual -D_GLIBCXX_CONCEPT_CHECKS -D_GLIBCPP_CONCEPT_CHECKS
#(-D_GLIBCPP_CONCEPT_CHECKS is < gcc-3.4, -D_GLIBCXX_CONCEPT_CHECKS is >= gcc-3.4)
#Rule for linking executables
$(DBIN) :
$(LN) $(CFLAGS) $^ -o $@ $(LIBS)
#Phony rules -- these are always run (even if a file of the same name exists and is "up to date")
.PHONY : clean veryclean all depend
#Rule for cleaning -- remove object files and editor temporaries (recursive search)
clean :
rm -f $(shell find . -name '*.o' -or -name '*~')
#veryclean will remove binaries too
veryclean : clean
rm -f $(DBIN)
#rule for compiling C++ files (note this overrides the implicit rule for all the warnings stuff)
%.o:%.cc
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES) $(CXXWARNINGS)
#override implicit rule for C files
%.o:%.c
$(CC) -c -o $@ $< $(CFLAGS) $(INCLUDES) $(CWARNINGS)
#Catch other C++ extensions
%.o:%.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCLUDES) $(CXXWARNINGS)
# Header dependencies...
# do `make depend` to append header dependencies to this file
# only go two directories down
depend :
makedepend -Y *.c */*.c */*.cpp *.cpp *.cc */*.cc 2>/dev/null
# DO NOT DELETE
Generated by GNU enscript 1.6.3.