################################################################################ # Makefile building all dynamic libraries: # libCalib.so # # OBJS - files type *.o (subdir.mk) # LIBS - list of the loaded libraries (objects.mk) # RM - command "rm -rf" # CPP_DEPS - files type *.d (subdir.mk) # .PHONY - # .SECONDARY - # # Vratislav Chudoba ################################################################################ RM := rm -rf CC := g++ F90 := gfortran #global paths ROOTINCS = $(shell root-config --incdir) ROOTLIBS = $(shell root-config --libdir) ROOTCFLAGS = $(shell root-config --cflags) PWD = $(shell pwd) #INSTALLFOLDER = $(HOME)/AculLib ACULDATA = $(PWD)/AculData TELOSS = $(PWD)/TELoss -include $(ACULDATA)/AculData.mk -include $(TELOSS)/TELoss.mk all: libAculData.so \ libTELoss.so #ROOT html documentation, it will be done as a program which will be alsa compiled by this makefile, program will be as a last condition after all of the libraries htmldoc: libAculData.so -$(RM) htmldoc root -l -q html.cxx clean: -$(RM) $(ACULDATAOBJS) $(ACULDATACPP_DEPS) -$(RM) $(ACULDATA)/AculDataDict.* *.pcm $(ACULDATA)/*.pcm -$(RM) libAculData.so -@echo ' ' -$(RM) $(TELOSSOBJS) $(TELOSSCPP_DEPS) -$(RM) $(TELOSS)/TELossDict.* *.pcm $(TELOSS)/*.pcm -$(RM) libTELoss.so -@echo ' ' -$(RM) htmldoc -@echo ' ' # Those *Dictionary* files below need special treating: $(ACULDATA)/AculDataDict.cpp: -@echo 'Pre-building AculDataDict.cpp and AculDataCint.h files' -rootcling -f $(ACULDATA)/AculDataDict.cpp -p $(ACULDATA_HEADERS) -@echo 'Creating: link to AculDataDict_rdict.pcm' -ln -s $(ACULDATA)/AculDataDict_rdict.pcm . -@echo ' ' $(TELOSS)/TELossDict.cpp: -@echo 'Pre-building TELossDict.cpp and TELossDict_rdict.pcm files' @echo -rootcling -f $@ -c $(CXXFLAGS) -p $(TELOSS_HEADERS) -@echo 'Creating: link to TELossDict_rdict.pcm' -ln -s $(TELOSS)/TELossDict_rdict.pcm . -@echo ' ' #*.so files libAculData.so: libTELoss.so $(ACULDATAOBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' $(CC) -L . -L $(ROOTLIBS) -shared -o"libAculData.so" $(ACULDATAOBJS) $(ACULDATALIBS) @echo 'Finished building target: $@' @echo ' ' libTELoss.so: $(TELOSSOBJS) @echo 'Building target: $@' @echo 'Invoking: GCC C++ Linker' $(CC) -L . -L $(ROOTLIBS) -shared -o"libTELoss.so" $(TELOSSOBJS) $(TELOSSLIBS) @echo 'Finished building target: $@' @echo ' ' .PHONY: all clean #.SECONDARY: AculData_pre-build TELoss_pre-build Detectors_pre-build libAculData.so libTELoss.so libDetectors.so # Each subdirectory must supply rules for building sources it contributes %.o: %.cpp @echo 'Building file: $@' @echo 'Invoking: $(CC) Compiler' $(CC) -I$(ROOTINCS) -O0 -g3 -Wall -c -fmessage-length=0 -fPIC $(ROOTCFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" @echo 'Finished building: $@' @echo ' ' # fortran object files $(TELOSS)/ELOSS.o: @echo 'Building file: $@' @echo 'Invoking: gfortran' $(F90) -c -fPIC -o"$(TELOSS)/ELOSS.o" $(TELOSS)/ELOSS.f90 @echo 'Finished building target: $@' @echo ' '