################################################################################
################################ - MAKEFILE RULES - ############################
################################################################################
CC := $(ccompiler)
CXX := $(compiler)
mex := $(matlabrootdir)/bin/mex
cudacompiler := $(cudarootdir)/bin/nvcc
all : $(robottarget) library
.PHONY : $(exetarget)
$(exetarget) : $(exe-objects)
@echo compiler path = ${compiler}
@echo
@echo ------------------ making executable
@echo
@mkdir -p $(bindir)
$(compiler) $(CXXFLAGS) $^ $(LDFLAGS) -o $@
.PHONY : $(steptarget)
$(steptarget) : $(step-objects)
@echo compiler path = ${compiler}
@echo
@echo ------------------ making step-by-step example
@echo
@mkdir -p $(bindir)
$(compiler) $(CXXFLAGS) $^ $(LDFLAGS) -o $@
.PHONY : $(precisiontarget)
$(precisiontarget) : $(precision-objects)
@echo compiler path = ${compiler}
@echo
@echo ------------------ making precision example
@echo
@mkdir -p $(bindir)
$(compiler) $(CXXFLAGS) $^ $(LDFLAGS) -o $@
.PHONY : $(robottarget)
$(robottarget) : $(robot-objects)
@echo compiler path = ${compiler}
@echo
@echo ------------------ making robotsimulator example
@echo
@mkdir -p $(bindir)
$(compiler) $(CXXFLAGS) $^ $(LDFLAGS) -o $@
.PHONY : mex
mex : $(mextarget)
@echo
@echo ------------------ making mex file $(mextarget)
@echo
$(mextarget) : $(mex-objects)
@echo compiler path = ${mex}
@echo
@echo ------------------ making mexfile
@echo
@mkdir -p $(mexdir)
$(mex) $(MEXFLAGS) $^ -output $@
.PHONY : sfunction
sfunction : $(sfunctiontarget)
@echo
@echo ------------------ making sfunction file $(sfunctiontarget)
@echo
$(sfunctiontarget) : $(sfunction-objects)
@echo compiler path = ${mex}
@echo
@echo ------------------ making sfunction file
@echo
@mkdir -p $(sfunctiondir)
$(mex) $(MEXFLAGS) $^ -output $@
.PHONY : library
library : $(libtarget)
@echo
@echo ------------------ making library $(libtarget)
@echo
$(libtarget): $(objects)
@echo
@echo ------------------ creating library
@echo
@mkdir -p $(libdir)
$(AR) $(ARFLAGS) $@ $^
.PHONY : dox
dox : Doxyfile
@echo
@echo ------------------ creating documentation
@echo
@doxygen Doxyfile
.PHONY : doxclean
doxclean :
@echo
@echo ------------------ removing documentation
@echo
@rm -rf doc
.PHONY : distclean
distclean :
@echo
@echo ------------------ cleaning everything
@echo
@rm -f $(pkgconfigfile) $(libtarget) $(packagename) $(objects) ${exetarget}.exe ${exe-objects} ${steptarget}.exe ${step-objects} ${precisiontarget}.exe ${precision-objects} $(dependencies) ${exe-dependencies} ${robottarget} ${robot-objects} ${robot-dependencies} ${mextarget} ${mex-objects} ${mex-dependencies} ${sfunctiontarget} ${sfunction-objects} ${sfunction-dependencies} TAGS gmon.out
.PHONY : clean
clean :
@echo
@echo ------------------ cleaning *.o exe lib
@echo
@rm -f $(objects) ${exe-objects} ${libtarget} ${exetarget}.exe ${mextarget} ${mex-objects} ${sfunctiontarget} ${sfunction-objects} TAGS gmon.out
.PHONY : clear
clear :
@rm -rf \#* ${dependencies}
.PHONY: install
install: $(libtarget) pkgfile uninstall install-exe
@echo
@echo ------------------ installing library and header files
@echo
@echo ------------------ installing at $(installdir)
@echo
@mkdir -p $(installdir)/include/$(packagename)
@cp -vfR $(includedir)/[!.]* $(installdir)/include/$(packagename)
@mkdir -p $(installdir)/lib/pkgconfig
@cp -vfR $(libtarget) $(installdir)/lib
@echo
@echo ------------------ installing the pkg-config file to $(installdir)/lib/pkgconfig. \
Remember to add this path to your PKG_CONFIG_PATH variable
@echo
@cp $(pkgconfigfile) $(installdir)/lib/pkgconfig/
.PHONY: install-exe
install-exe: $(exetarget)
@cp $(exetarget) $(installdir)/bin
.PHONY: install-dev
install-dev : $(libtarget) pkgfile uninstall
@echo
@echo ------------------ installing library and development files
@echo
@echo ------------------ installing at $(installdir)
@echo
@mkdir -p $(installdir)/include/$(packagename)
@cp -vfR $(includedir)/$(packagename)/[!.]* $(installdir)/include/$(packagename)
@mkdir -p $(installdir)/lib/pkgconfig
@cp -vfR $(libtarget) $(installdir)/lib # copy the static library
@mkdir -p $(installdir)/src/$(packagename) # create the source directory
@cp -vfR $(srcdir)/*.c* $(installdir)/src/$(packagename) # copy development files
@cp -vf makefile $(installdir)/src/$(packagename)
@cp $(pkgconfigfile) $(installdir)/lib/pkgconfig/
.PHONY: uninstall
uninstall:
@echo
@echo ------------------ uninstalling if-installed
@echo
@rm -rf $(installdir)/include/$(packagename)
@rm -f $(installdir)/$(libtarget)
@rm -rf $(installdir)/src/$(packagename)
@rm -f $(installdir)/lib/pkgconfig/$(pkgconfigfile)
@rm -f $(installdir)/bin/$(packagename)
ifneq "$(MAKECMDGOALS)" "clean"
include $(dependencies)
endif
# %.d : %.cc
# @echo
# @echo ------------------ compiling and creating dependencies for cc file $@
# @echo
# $(compiler) -c $(CFLAGS) $< | \
# $(compiler) $(CFLAGS) -MM $< | \
# sed 's,\($(notdir $*)\.o\) *:,$(dir $@)\1 $@: ,' > $@.tmp
# mv -f $@.tmp $@
# @echo
%.d : %.c
@echo
@echo ------------------ creating dependencies for c file $@
@echo
$(ccompiler) $(CXXFLAGS) -MM $< | \
sed 's,\($(notdir $*)\.o\) *:,$(dir $@)\1 $@: ,' > $@.tmp
mv -f $@.tmp $@
@echo
%.d : %.cpp
@echo
@echo ------------------ creating dependencies for cpp file $@
@echo
$(compiler) $(CXXFLAGS) -MM $< | \
sed 's,\($(notdir $*)\.o\) *:,$(dir $@)\1 $@: ,' > $@.tmp
mv -f $@.tmp $@
@echo
%.d : %.cu
@echo
@echo ------------------ creating dependencies for cuda file $@
@echo
$(cudacompiler) $(NVCCFLAGS) -M $< | \
sed 's,\($(notdir $*)\.o\) *:-,$(dir $@)\1 $@: ,' > $@.tmp
mv -f $@.tmp $@
@echo
%.o : %.c
@echo
@echo ------------------ compiling c file $@
@echo
$(ccompiler) -c $(CXXFLAGS) $< -o $@
@echo
%.o : %.cpp
@echo
@echo ------------------ compiling cpp file $@
@echo
$(compiler) -c $(CXXFLAGS) $< -o $@
@echo
%.o : %.cu
@echo
@echo ------------------ compiling cuda file $@
@echo
$(cudacompiler) -c $(NVCCFLAGS) $< -o $@
@echo
.PHONY : pkgfile
pkgfile:
@echo
@echo ------------------ creating pkg-config file
@echo
@echo "# Package Information for pkg-config" > $(pkgconfigfile)
@echo "# Author: $(author)" >> $(pkgconfigfile)
@echo "# Created: `date`" >> $(pkgconfigfile)
@echo "# Licence: $(licence)" >> $(pkgconfigfile)
@echo >> $(pkgconfigfile)
@echo prefix=$(installdir) >> $(pkgconfigfile)
@echo exec_prefix=$$\{prefix\} >> $(pkgconfigfile)
@echo libdir=$$\{exec_prefix\}/lib >> $(pkgconfigfile)
@echo includedir=$$\{prefix\}/include >> $(pkgconfigfile)
@echo >> $(pkgconfigfile)
@echo Name: "$(packagename)" >> $(pkgconfigfile)
@echo Description: "$(description)" >> $(pkgconfigfile)
@echo Version: "$(version)" >> $(pkgconfigfile)
@echo Libs: -L$$\{libdir} -l$(packagename) >> $(pkgconfigfile)
@echo Cflags: -I$$\{includedir\} >> $(pkgconfigfile)
@echo >> $(pkgconfigfile)
.PHONY : flags
flags :
@echo
@echo ------------------ build flags
@echo
@echo ldflags = $(LDFLAGS)
@echo cxxflags = $(CXXFLAGS)
@echo mexflags = $(MEXFLAGS)
@echo nvccflags = $(NVCCFLAGS)
@echo sources = ${sources}
@echo objects = ${exe-objects}
.PHONY : rules
rules :
@echo
@echo ------------------ legitimate rules
@echo
@echo "(nothing) : makes the executable : by default src/main.cpp is included to the sources list"
@echo " and used in the exe-build. Change its value with $exe-source-file variable"
@echo "library : generates the library"
@echo "dox : generates the doxygen documentation if Doxyfile exists"
@echo "doxclean : cleans up the documentation"
@echo "clean : cleans up .o lib and exe files"
@echo "distclean : cleans everything except source+headers"
@echo "install : installs the library"
@echo "install-dev : installs the library along with documentation files"
@echo "install-exe : installs the executable"
@echo "uninstall : uninstalls the library"
@echo "pkgfile : generates the pkg-config file"
@echo "flags : shows the flags that will be used"
@echo "rules : shows this text"
@echo "clear : clears #* & dependency files"
@echo
|