Updated. Accept a path parameter on command line from the user.
# Makefile for top dir
# $(call version_number,1.2.3)
# major.minor.patch
# libtool manual 4.2: -version-number
define version_number
$(MAKE) -C $@ [email protected].$(word 1,$(subst ., ,$(1)))
@ cp $(OBJDIR)/$@/$@ $(OBJDIR)/$@/[email protected].$(1)
@ cd $(OBJDIR)/$@; ln -f -s $(OBJDIR)/$@/[email protected].$(1)
$(OBJDIR)/$@/[email protected].$(word 1,$(subst ., ,$(1))); cd ..
@ cd $(OBJDIR)/$@; ln -f -s $(OBJDIR)/$@/[email protected].$(1)
$(OBJDIR)/$@/[email protected]; cd ..
endef
# make BUILD_DIR=build
ifndef BUILD_DIR
export OBJDIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/build
else
export OBJDIR = $(abspath $(BUILD_DIR))
endif
SUBDIRS = main foo
all : $(SUBDIRS)
install : $(SUBDIRS)
main : foo
main : ; $(MAKE) -C $@
foo : ; $(call version_number,1.2.3)
# make DESTDIR=~/foo install
install :
install -d "$(DESTDIR)/usr/local/bin"
install -d "$(DESTDIR)/usr/local/lib"
install -m 0755 $(OBJDIR)/main/main "$(DESTDIR)/usr/local/bin"
install -m 0755 $(OBJDIR)/foo/*.so* "$(DESTDIR)/usr/local/lib"
clean : ; -rm -fr $(OBJDIR)
.PHONY : $(SUBDIRS) all install clean