Skip to content
Snippets Groups Projects
Select Git revision
  • e5af0a7ff86126c564cb4d953bc9b0605b108fea
  • master default protected
  • fix-issue-901
  • fix-issue-928
  • fix-issue-896-zmq-publish
  • fix-issue-885
  • fix-issue-921
  • fix-910
  • fix-issue-804
  • srt-bandQ-receiver
  • fix-issue-855
  • stable
  • srt-bandW-receiver
  • fix-issue-805
  • feature-med-c-band-srv
  • fix-issue-760
  • fix-issue-628
  • fix-issue-588
  • fix-issue-derotator-328
  • OffsetReview
  • DerotatorAndMinorServo
  • discos1.0.6h
  • discos1.0.6f
  • discos1.0.6e
  • discos1.0.6d
  • discos1.0.6c
  • discos1.0.6b
  • discos1.0.6a
  • discos1.0.6
  • discos1.0.5
  • discos1.0.4
  • discos1.0.3
  • discos1.0.2
  • discos1.0.1
  • discos1.0.0
  • discos1.0-rc02
  • discos1.0-rc01
  • escs-0.5
  • escs-0.4
  • nuraghe-0.6
  • noto-0.1
41 results

Makefile

Blame
  • Makefile 8.18 KiB
    #############################################################################
    # Makefile for building: PacketLib
    # Project:  PacketLib
    # Template: lib and exe
    # Use make variable_name=' options ' to override the variables or make -e to
    # override the file variables with the environment variables
    # 		make CFLAGS='-g' or make prefix='/usr'
    # Instructions:
    # - modify the section 1)
    # - if you want, modify the section 2) and 3), but it is not necessary
    # - modify the variables of the section 4): CFLAGS INCPATH ALL_CFLAGS CPPFLAGS LIBS
    # - in section 10), modify the following action:
    #		* all: and or remove exe and lib prerequisite
    #		* lib: and or remove staticlib and dynamiclib prerequisite
    #		* clean: add or remove the files and directories that should be cleaned
    #		* install: add or remove the files and directories that should be installed
    #		* uninstall: add or remove the files and directories that should be uninstalled
    #############################################################################
    
    SHELL = /bin/sh
    
    ####### 1) Project names and system
    
    #SYSTEM: linux or QNX
    SYSTEM= $(shell gcc -dumpmachine)
    PROJECT=PacketLib
    EXE_NAME = main
    LIB_NAME = libpacket
    VER_FILE_NAME = PlVersion.h
    
    ####### 2) Directories for the installation
    
    # Prefix for each installed program. Only ABSOLUTE PATH
    prefix=/usr/local
    exec_prefix=$(prefix)
    # The directory to install the binary files in.
    bindir=$(exec_prefix)/bin
    # The directory to install the local configuration file.
    datadir=$(exec_prefix)/share
    # The directory to install the libraries in.
    libdir=$(exec_prefix)/lib
    # The directory to install the info files in.
    infodir=$(exec_prefix)/info
    # The directory to install the include files in.
    includedir=$(exec_prefix)/include/packet
    
    ####### 3) Directories for the compiler
    
    OBJECTS_DIR = obj
    SOURCE_DIR = src
    INCLUDE_DIR = include
    DOC_DIR = ref
    DOXY_SOURCE_DIR = code_filtered
    EXE_DESTDIR  = .
    LIB_DESTDIR = lib
    
    ####### 4) Compiler, tools and options
    
    CXX ?= g++
    CC ?= gcc
    #Insert the optional parameter to the compiler. The CFLAGS could be changed externally by the user
    CFLAGS ?= -O3 -fPIC
    CXXFLAGS ?= -O3 -fPIC
    #Set INCPATH to add the inclusion paths
    INCPATH = -I ./include
    #Insert the implicit parameter to the compiler:
    ALL_CFLAGS = -fexceptions -Wall $(INCPATH)
    ifeq ($(SYSTEM), QNX)
    	ALL_CFLAGS += -Vgcc_ntox86_gpp -lang-c++
    endif
    
    #Set LIBS for addition library
    LIBS = -lstdc++ 
    ifeq ($(SYSTEM), QNX)
    	LIBS += -lsocket
    endif
    ifneq (, $(findstring apple, $(SYSTEM)))
     	# Do apple things
    	ALL_CFLAGS += -I$(LOCAL)/include
    	LIBS += -L$(LOCAL)/lib
    endif 
    
    LINK ?= $(CXX)
    #for link
    LFLAGS = -shared -Wl,-soname,$(TARGET1) -Wl,-rpath,$(DESTDIR)
    AR       = ar cqs
    TAR      = tar -cf
    GZIP     = gzip -9f
    COPY     = cp -f
    COPY_FILE= $(COPY) -p
    COPY_DIR = $(COPY) -pR
    DEL_FILE = rm -f
    SYMLINK  = ln -sf
    DEL_DIR  = rm -rf
    MOVE     = mv -f
    CHK_DIR_EXISTS= test -d
    MKDIR    = mkdir -p
    
    ####### 5) VPATH
    
    VPATH=$(SOURCE_DIR):$(INCLUDE_DIR):
    vpath %.o $(OBJECTS_DIR)
    
    ####### 6) Files of the project
    	
    INCLUDE=$(foreach dir,$(INCLUDE_DIR), $(wildcard $(dir)/*.h))
    SOURCE=$(foreach dir,$(SOURCE_DIR), $(wildcard $(dir)/*.cpp))
    SOURCE+=$(foreach dir,$(SOURCE_DIR), $(wildcard $(dir)/*.c))
    #Objects to build
    OBJECTS=$(addsuffix .o, $(basename $(notdir $(SOURCE))))
    #only for documentation generation
    DOC_INCLUDE= $(addprefix $(DOXY_SOURCE_DIR)/, $(notdir $(INCLUDE)))
    DOC_SOURCE= $(addprefix $(DOXY_SOURCE_DIR)/, $(notdir $(SOURCE)))
    
    ####### 7) Only for library generation
    
    #TARGET   = $(LIB_NAME).so.$(shell cat version)
    TARGETA	= $(LIB_NAME).a
    #TARGETD	= $(LIB_NAME).so.$(shell cat version)
    #TARGET0	= $(LIB_NAME).so
    #TARGET1	= $(LIB_NAME).so.$(shell cut version -f 1 -d '.')
    #TARGET2	= $(LIB_NAME).so.$(shell cut version -f 1 -d '.').$(shell cut version -f 2 -d '.')
    
    ####### 8) Preliminar operations
    
    #$(shell  cut $(INCLUDE_DIR)/$(VER_FILE_NAME) -f 3 > version)
    #WARNING: use -d ' ' if in the version.h the separator is a space
    
    ####### 9) Pattern rules
    
    test/%.o : test/%.cpp
    	$(CXX) $(CXXFLAGS) $(ALL_CFLAGS) -c $< -o $@ -I /usr/include/cppunit
    
    %.o : %.cpp | makeobjdir
    	$(CXX) $(CXXFLAGS) $(ALL_CFLAGS) -c $< -o $(OBJECTS_DIR)/$@
    
    %.o : %.c | makeobjdir
    	$(CC) $(CFLAGS) $(ALL_CFLAGS) -c $< -o $(OBJECTS_DIR)/$@
    
    #only for documentation generation
    $(DOXY_SOURCE_DIR)/%.h : %.h
    	cp  $<  $@
    
    $(DOXY_SOURCE_DIR)/%.cpp : %.cpp
    	cp  $<  $@
    	
    ####### 10) Build rules
    
    #all: compile the entire program.
    all: lib 
    
    lib: staticlib 
    	
    exe: main.o $(OBJECTS)
    		test -d $(EXE_DESTDIR) || mkdir -p $(EXE_DESTDIR)
    		$(CXX) $(CXXFLAGS) $(ALL_CFLAGS) -o $(EXE_DESTDIR)/$(EXE_NAME) $(OBJECTS_DIR)/*.o $(LIBS)
    	
    tests: test/runtests
    
    TESTOBJS = test/InputPacketStreamFileTest.o test/runtests.o
    
    test/runtests: $(TESTOBJS) lib
    	$(CXX) $(CXXFLAGS) $(ALL_CFLAGS) -o $@ $(TESTOBJS) -Llib -lpacket $(LIBS) -lcppunit
    
    staticlib: $(OBJECTS)
    		test -d $(LIB_DESTDIR) || mkdir -p $(LIB_DESTDIR)
    		$(DEL_FILE) $(LIB_DESTDIR)/$(TARGETA) 	
    		$(AR) $(LIB_DESTDIR)/$(TARGETA) $(OBJECTS_DIR)/*.o
    	
    dynamiclib: $(OBJECTS)
    		test -d $(LIB_DESTDIR) || mkdir -p $(LIB_DESTDIR)
    		$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)
    		$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS_DIR)/*.o $(LIBS)
    		$(SYMLINK) $(TARGET) $(TARGET0)
    		$(SYMLINK) $(TARGET) $(TARGET1)
    		$(SYMLINK) $(TARGET) $(TARGET2)
    		test $(LIB_DESTDIR) = . || $(DEL_FILE) $(LIB_DESTDIR)/$(TARGET)
    		test $(LIB_DESTDIR) = . || $(DEL_FILE) $(LIB_DESTDIR)/$(TARGET0)
    		test $(LIB_DESTDIR) = . || $(DEL_FILE) $(LIB_DESTDIR)/$(TARGET1)
    		test $(LIB_DESTDIR) = . || $(DEL_FILE) $(LIB_DESTDIR)/$(TARGET2)
    		test $(LIB_DESTDIR) = . || $(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) $(LIB_DESTDIR)
    	
    makeobjdir:
    	test -d $(OBJECTS_DIR) || mkdir -p $(OBJECTS_DIR)
    	
    #clean: delete all files from the current directory that are normally created by building the program. 
    clean:
    	$(DEL_FILE) $(OBJECTS_DIR)/*.o test/*.o
    	$(DEL_FILE) *~ core *.core
    	$(DEL_FILE) $(LIB_DESTDIR)/*.a
    	$(DEL_FILE) $(LIB_DESTDIR)/*.so*
    	$(DEL_FILE) $(EXE_DESTDIR)/$(EXE_NAME)	
    	$(DEL_FILE) version
    	$(DEL_FILE) prefix
    	$(DEL_FILE) $(PROJECT).dvi
    	$(DEL_FILE) $(PROJECT).pdf
    	$(DEL_FILE) $(PROJECT).ps
    	test $(OBJECTS_DIR) = . || $(DEL_DIR) $(OBJECTS_DIR)
    	test $(EXE_DESTDIR) = . || $(DEL_DIR) $(EXE_DESTDIR)
    	test $(LIB_DESTDIR) = . || $(DEL_DIR) $(LIB_DESTDIR)
    	test $(DOXY_SOURCE_DIR) = . || $(DEL_DIR) $(DOXY_SOURCE_DIR)
    	test $(DOC_DIR) = . || $(DEL_DIR) $(DOC_DIR)
    	
    	
    #Delete all files from the current directory that are created by configuring or building the program. 
    distclean: clean
    
    #install: compile the program and copy the executables, libraries, 
    #and so on to the file names where they should reside for actual use. 
    install: all
    	$(shell echo $(prefix) > prefix)
    	@#test -d $(datadir) || mkdir -p $(datadir)
    	@#test -d $(infodir) || mkdir -p $(infodir)
    
    	# For library installation
    	test -d $(libdir) || mkdir -p $(libdir)
    	test -d $(includedir) || mkdir -p $(includedir)	
    	$(COPY_FILE) $(LIB_DESTDIR)/$(TARGETA) $(libdir)
    	@#$(COPY_FILE) $(LIB_DESTDIR)/$(TARGET0) $(libdir)
    	@#$(COPY_FILE) $(LIB_DESTDIR)/$(TARGET1) $(libdir)
    	@#$(COPY_FILE) $(LIB_DESTDIR)/$(TARGET2) $(libdir)
    	@#$(COPY_FILE) $(LIB_DESTDIR)/$(TARGETD) $(libdir)
    	$(COPY_FILE) $(INCLUDE) $(includedir)
    
    	@#For exe installation
    	@#test -d $(bindir) || mkdir -p $(bindir)
    	@#$(COPY_FILE) $(EXE_DESTDIR)/$(EXE_NAME) $(bindir)
    
    #uninstall: delete all the installed files--the copies that the `install' target creates.
    uninstall:
    	@#For library uninstall
    	$(DEL_FILE) $(libdir)/$(TARGETA)
    	$(DEL_FILE) $(libdir)/$(TARGETD)
    	$(DEL_FILE) $(libdir)/$(TARGET0)
    	$(DEL_FILE) $(libdir)/$(TARGET1)
    	$(DEL_FILE) $(libdir)/$(TARGET2)
    	$(DEL_FILE) $(addprefix $(includedir)/, $(notdir $(INCLUDE)))
    
    	@# For exe uninstall
    	@#$(DEL_FILE) $(bindir)/$(EXE_NAME)
    
    #dist: create a distribution tar file for this program
    dist: all
    
    # dvi, pdf, ps, for documentation generation
    dvi: info
    	cd $(DOC_DIR)/latex && $(MAKE)
    	$(SYMLINK) $(DOC_DIR)/latex/refman.dvi $(PROJECT).dvi
    	
    pdf: info
    	cd $(DOC_DIR)/latex && $(MAKE) pdf
    	$(SYMLINK) $(DOC_DIR)/latex/refman.pdf $(PROJECT).pdf
    	
    ps: info
    	cd $(DOC_DIR)/latex && $(MAKE) ps
    	$(SYMLINK) $(DOC_DIR)/latex/refman.ps $(PROJECT).ps
    	
    #info: generate any Info files needed.
    info:	makedoxdir $(DOC_INCLUDE) $(DOC_SOURCE)
    	test -d $(DOC_DIR) || mkdir -p $(DOC_DIR)
    	doxygen Doxyfile
    	
    makedoxdir:
    	test -d $(DOXY_SOURCE_DIR) || mkdir -p $(DOXY_SOURCE_DIR)