################################################################## # # makefile # # for the MARS software # ################################################################## # @maintitle # @code # # please change all system depend values in the # config.mk.${OSTYPE} file # # include Makefile.conf.$(OSTYPE) include Makefile.conf.general # #PROGRAMS = readraw merpp mars test mona status PROGRAMS := readdaq merpp readraw callisto star ganymed sponde showlog showplot mars mars-config SOLIB := libmars.so CINT = M # # connect the include files defined in the config.mk file # # WARNING: the result (whether the linkage works or not) depends on the # order of the libraries. It seems, that the most base library # must be the last one # # # ----->>> mars libraries # SUBDIRS := mbase \ mastro \ mmain \ mfbase \ mfilter \ mdata \ mhbase \ mhvstime \ mhist \ manalysis \ mextralgo \ msignal \ mbadpixels \ mhcalib \ mhflux \ mcalib \ mpedestal \ mfileio \ mreflector \ mgeom \ msql \ mimage \ mhft \ mmc \ mraw \ mcamera \ mtrigger \ mpointing \ mreport \ mgui \ mranforest \ mjobs \ mjoptim \ mjtrain \ mmovie \ mtools \ mmuon #LIBRARIES = $(SUBDIRS:%=lib/lib%.a) LIBRARIES := $(SUBDIRS:=.a) CONDOR := $(SUBDIRS:=.condor) MRPROPERS := $(SUBDIRS:=.mrproper) CLEANERS := $(SUBDIRS:=.clean) LIBS := $(SOLIB) #------------------------------------------------------------------------------ .SUFFIXES: .c .cc .h .o .cxx .hxx .gch SRCFILES = ############################################################ RNDMNAME:=$(shell mktemp) all: $(SOLIB) $(PROGRAMS) @echo " Done. " @echo " " static: LIBS=$(SUBDIRS:=/*.o) $(OBJS) #static: rmlib $(LIBRARIES) $(PROGRAMS) static: $(LIBRARIES) $(PROGRAMS) @echo " Done. " @echo " " include Makefile.rules # # Use $(CXX) -v ... for a more verbose output # # ROOTGLIBS must be there - why? How can I link the libraries? $(SOLIB): $(LIBRARIES) $(OBJS) $(HEADERS) @echo " Linking shared object $(SOLIB) ..." $(CXX) $(CXXFLAGS) $(SOFLAG) $(OBJS) $(SUBDIRS:=/*.o) $(ROOTGLIBS) -o ${RNDMNAME} mv ${RNDMNAME} $@ chmod go+r $@ # This is a special workaround to create the shared object (bundle, plugin) # for root and the dynlib (to be linked with the executable) on Mac OSX ifneq ($(OSTYPE),darwin) $(PROGRAMS): $(PROGRAMS:=.o) $(SOLIB) @echo " Linking $@ ..." $(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(SOLIB) $@.o $(MARS_LIB) -o $@ # Use this to link the programs statically - for gprof #$(PROGRAMS): $(OBJS) $(HEADERS) $(PROGRAMS:=.o) # @echo " Linking $@ ..." # $(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(OBJS) $(SUBDIRS:=/*.o) $@.o $(MARS_LIB) -o $@ else $(DYLIB): $(LIBRARIES) $(OBJS) $(HEADERS) @echo " Linking dylib $(DYLIB) ..." $(CXX) $(CXXFLAGS) $(DYFLAG) $(OBJS) $(SUBDIRS:=/*.o) $(ROOTGLIBS) -o $@ $(PROGRAMS): $(PROGRAMS:=.o) $(DYLIB) @echo " Linking mac executable $@ ..." $(CXX) $(CXXFLAGS) $(ROOTGLIBS) $(DYLIB) $@.o $(MARS_LIB) -o $@ endif rmcondor: rm -f .makecondor.log condor: rmcondor $(CONDOR) echo Waiting for jobs to finish... condor_wait .makecondor.log rm .makecondor.log make -j2 $(PROGRAMS) # find -name "*/.makecondor.*" # find -maxdepth 2 -name ".makecondor.*" -exec echo {}\\\; cat {}\\\; echo {}\\\; \; dox: $(SOLIB) @echo @echo " Creating html documentation and logfile dohtml.log..." rm -f dohtml.log root -b -q dohtml.C 2>&1 >> dohtml.log | tee -a dohtml.log @echo " done." @echo #clean: rmcint rmobjs rmdep rmcore rmlib mrproper: $(MRPROPERS) rmbin rmbak rmbakmac rmhtml clean @echo " Done." @echo " " tar: mrproper @echo "Making tar-file" root -b -q -l -n tar.C # @tar cvf ../mars.tar --exclude=Root .rootrc * # @gzip -9 ../mars.tar #Makefile.depend: # (! find ./ Makefile.depend -maxdepth 1 -empty 2> /dev/null && \ # echo " Generating dependancies into Makefile.depend" && \ # makedepend -- $(INCLUDES) -- $(PROGRAMS:=.cc) $(SRCS) $(SUBDIRS:=/*.cc) -w1024 -f- 2> /dev/null | grep -v Cint | grep -v "/usr/" > Makefile.depend && \ # echo " ") || find -maxdepth 0 -true > /dev/null # #depend: Makefile.depend # @endcode