c++ - Linux makefile debug library -
i want write makefile static library. , need version of library debug information debugging..
this have:
cc=g++ srcdir=../../src srccore = $(srcdir)/core/lodepng.cpp $(srcdir)/core/polybasicfileprovider.cpp $(srcdir)/core/polybeziercurve.cpp $(srcdir)/core/polybone.cpp $(srcdir)/core/polycamera.cpp $(srcdir)/core/polyclient.cpp $(srcdir)/core/polycolor.cpp $(srcdir)/core/polyconfig.cpp $(srcdir)/core/polycore.cpp $(srcdir)/core/polycorefileprovider.cpp $(srcdir)/core/polycoreinput.cpp $(srcdir)/core/polycoreservices.cpp $(srcdir)/core/polycubemap.cpp $(srcdir)/core/polydata.cpp $(srcdir)/core/polyentity.cpp $(srcdir)/core/polyevent.cpp $(srcdir)/core/polyeventdispatcher.cpp $(srcdir)/core/polyeventhandler.cpp $(srcdir)/core/polyfont.cpp $(srcdir)/core/polyfontglyphsheet.cpp $(srcdir)/core/polyfontmanager.cpp $(srcdir)/core/polygpudrawbuffer.cpp $(srcdir)/core/polyimage.cpp $(srcdir)/core/polyinputevent.cpp $(srcdir)/core/polylabel.cpp $(srcdir)/core/polylogger.cpp $(srcdir)/core/polymaterial.cpp $(srcdir)/core/polymaterialmanager.cpp $(srcdir)/core/polymatrix4.cpp $(srcdir)/core/polymesh.cpp $(srcdir)/core/polyobject.cpp $(srcdir)/core/polyopenglgraphicsinterface.cpp $(srcdir)/core/polypaaudiointerface.cpp $(srcdir)/core/polyparticleemitter.cpp $(srcdir)/core/polypeer.cpp $(srcdir)/core/polyperlin.cpp $(srcdir)/core/polyphysfsfileprovider.cpp $(srcdir)/core/polyquaternion.cpp $(srcdir)/core/polyquaternioncurve.cpp $(srcdir)/core/polyray.cpp $(srcdir)/core/polyrectangle.cpp $(srcdir)/core/polyrenderdataarray.cpp $(srcdir)/core/polyrenderer.cpp $(srcdir)/core/polyresource.cpp $(srcdir)/core/polyresourcemanager.cpp $(srcdir)/core/polyscene.cpp $(srcdir)/core/polysceneentityinstance.cpp $(srcdir)/core/polysceneimage.cpp $(srcdir)/core/polyscenelabel.cpp $(srcdir)/core/polyscenelight.cpp $(srcdir)/core/polysceneline.cpp $(srcdir)/core/polyscenemanager.cpp $(srcdir)/core/polyscenemesh.cpp $(srcdir)/core/polysceneprimitive.cpp $(srcdir)/core/polyscenerendertexture.cpp $(srcdir)/core/polyscenesound.cpp $(srcdir)/core/polyscenesprite.cpp $(srcdir)/core/polyserver.cpp $(srcdir)/core/polyshader.cpp $(srcdir)/core/polyskeleton.cpp $(srcdir)/core/polysocket.cpp $(srcdir)/core/polysound.cpp $(srcdir)/core/polysoundmanager.cpp $(srcdir)/core/polystring.cpp $(srcdir)/core/polytexture.cpp $(srcdir)/core/polythreaded.cpp $(srcdir)/core/polytimer.cpp $(srcdir)/core/polytimermanager.cpp $(srcdir)/core/polytween.cpp $(srcdir)/core/polytweenmanager.cpp $(srcdir)/core/polyvector2.cpp $(srcdir)/core/polyvector3.cpp $(srcdir)/core/polyvector4.cpp $(srcdir)/core/rgbe.cpp $(srcdir)/core/tinystr.cpp $(srcdir)/core/tinyxml.cpp $(srcdir)/core/tinyxmlerror.cpp $(srcdir)/core/tinyxmlparser.cpp $(srcdir)/core/polysdlcore.cpp objcore=$(srccore:.cpp=.o) srctemplate=$(srcdir)/view/linux/polycodeview.cpp templateapp/polycodetemplateapp.cpp templateapp/polycodetemplate.cpp objtemplate=$(srctemplate:.cpp=.o) cflags=-i../../include -g -ddebug libdir=../../lib/linux ldflags=-l$(libdir) -lpolycore -lfreetype -lvorbisfile -lvorbis -logg -lphysfs -lz -lx11 -lrt -ldl -lpthread -lsdl -lglew -lglu -lgl ldflags_debug=-l$(libdir) -lpolycored -lfreetype -lvorbisfile -lvorbis -logg -lphysfs -lz -lx11 -lrt -ldl -lpthread -lsdl -lglew -lglu -lgl default: setup core setup: @mkdir -p $(libdir) .cpp.o: @echo "building "$< @$(cc) $(cflags) -c $< -o $@ core: $(objcore) @echo "linking $(libdir)/libpolycore.a" @ar rcs $(libdir)/libpolycore.a $(objcore) debug: $(objcore) @echo "linking $(libdir)/libpolycored.a" @ar rcs $(libdir)/libpolycored.a $(objcore) template: $(objtemplate) @echo "linking templateapp/polycodetemplate" @$(cc) $(cflags) $(ldflags) $(objtemplate) -o templateapp/polycodetemplate templatedebug: $(objtemplate) @echo "linking templateapp/polycodetemplate" @$(cc) -ddebug -g $(cflags) $(ldflags_debug) $(objtemplate) -o templateapp/polycodetemplate clean: rm -f $(objcore) $(libdir)/libpolycore.a $(libdir)/libpolycored.a to make clear need: want able debug code of files listed in srccore in kdevelop (using gdb) when running polycodetemplate.
i'm @ end of knowledge makefiles :$
help!
you need build separate version of each translation unit, debugging flags turned on, namely -g.
normally, each .cpp translation unit gets compiled .o, , understand rule doing so. pick extension debug version, let's use ".do":
debugflags= -g .cpp.do: @echo "building "$< @$(cc) $(cflags) $(debugflags) -c $< -o $@ now, foo.cpp going compiled foo.do using -g flag. so, comes down to:
a) assembling regular library way you're doing now.
b) assembling debug library .do files, instead of .lo files.
i see makefile defines:
objcore=$(srccore:.cpp=.o) # ... @ar rcs $(libdir)/libpolycore.a $(objcore) ok, now, let's add this:
.suffixes: .do dobjcore=$(srccore:.cpp=.do) and homework assignment going to figure out need "debug" target, make use of it.
p.s. if later intend turn on optimizations, not add -o2, or such, cflags. define separate optflags macro, , add .cpp.o target only, debug version of library still not optimized.
Comments
Post a Comment