Improve Makefiles with build and install directories

This commit is contained in:
Igor Socec 2017-01-24 18:16:47 +01:00
parent efc292af2c
commit aae67971ff
3 changed files with 68 additions and 17 deletions

View file

@ -2,32 +2,42 @@
MOXERVER = moxerver MOXERVER = moxerver
MOXANIX = moxanix MOXANIX = moxanix
# installation root # ==============================================================================
# system install root directory
INSTALL_ROOT = ./install.dir INSTALL_ROOT = ./install.dir
# ============================================================================== # ==============================================================================
MOXERVER_BUILDDIR = build.dir # directories used for local component builds
BUILDDIR = build.dir
INSTALLDIR = install.dir
# ============================================================================== # ==============================================================================
# supported make options (clean, install...) # supported make options (clean, install...)
.PHONY: default all clean .PHONY: all default install clean
# all calls all other options # all calls all other options
all: default all: default install
# default builds moxerver # default builds components
default: default:
cd $(MOXERVER) && make OUTDIR=$(MOXERVER_BUILDDIR) cd $(MOXERVER) && make BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
cd $(MOXANIX) && make BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
# install handles moxerver and moxanix installation # install handles component installation
install: default install: default
mkdir -p $(INSTALL_ROOT) mkdir -p $(INSTALL_ROOT)
cp $(MOXERVER)/$(MOXERVER_BUILDDIR)/$(MOXERVER) $(INSTALL_ROOT)/$(MOXERVER)
cp $(MOXANIX)/$(MOXANIX).* $(INSTALL_ROOT)/ cd $(MOXERVER) && make install BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
cp -r $(MOXERVER)/$(INSTALLDIR)/* $(INSTALL_ROOT)/
cd $(MOXANIX) && make install BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
cp -r $(MOXANIX)/$(INSTALLDIR)/* $(INSTALL_ROOT)/
# clean removes build and install results # clean removes build and install results
clean: clean:
cd $(MOXERVER) && make clean cd $(MOXERVER) && make clean BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
cd $(MOXANIX) && make clean BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALLDIR)
-rm -rf $(INSTALL_ROOT) -rm -rf $(INSTALL_ROOT)

31
moxanix/Makefile Normal file
View file

@ -0,0 +1,31 @@
# target names
TARGET_CONTROL = moxanix.sh
TARGET_CONFIG = moxanix.cfg
# ==============================================================================
# directory for build results
BUILDDIR = build.dir
# installation root
INSTALLDIR = install.dir
# ==============================================================================
# supported make options (clean, install...)
.PHONY: default install clean
# default does nothing
default:
# install targets
install:
# install control script
mkdir -p $(INSTALLDIR)/bin
cp $(TARGET_CONTROL) $(INSTALLDIR)/bin/
# install configuration file
mkdir -p $(INSTALLDIR)/etc
cp $(TARGET_CONFIG) $(INSTALLDIR)/etc/
# clean removes object files and target (ignore errors with "-" before commands)
clean:
-rm -rf $(INSTALLDIR)

View file

@ -1,8 +1,12 @@
# target name # target names
TARGET = moxerver TARGET_BINARY = moxerver
# ==============================================================================
# directory for build results # directory for build results
BUILDDIR = build.dir BUILDDIR = build.dir
# installation root
INSTALLDIR = install.dir
# ============================================================================== # ==============================================================================
@ -22,7 +26,7 @@ CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS)
# ============================================================================== # ==============================================================================
# build everything in a dedicated directory $(OUTDIR) # build everything in a dedicated directory $(BUILDDIR)
# objects are .o files created from all .c files in the directory (same name) # objects are .o files created from all .c files in the directory (same name)
OBJECTS = $(patsubst %.c, $(BUILDDIR)/%.o, $(wildcard *.c)) OBJECTS = $(patsubst %.c, $(BUILDDIR)/%.o, $(wildcard *.c))
@ -35,20 +39,26 @@ $(BUILDDIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) -c $< -o $@
# target is built from all object files # target is built from all object files
$(BUILDDIR)/$(TARGET): $(OBJECTS) $(BUILDDIR)/$(TARGET_BINARY): $(OBJECTS)
$(CC) $(OBJECTS) $(CFLAGS) -o $@ $(CC) $(OBJECTS) $(CFLAGS) -o $@
# ============================================================================== # ==============================================================================
# supported make options (clean, install...) # supported make options (clean, install...)
.PHONY: default all clean .PHONY: all default install clean
# all calls all other options # all calls all other options
all: default all: default install
# default builds target # default builds target
default: $(BUILDDIR)/$(TARGET) default: $(BUILDDIR)/$(TARGET_BINARY)
# install target
install: default
mkdir -p $(INSTALLDIR)/bin
cp $(BUILDDIR)/$(TARGET_BINARY) $(INSTALLDIR)/bin/
# clean removes object files and target (ignore errors with "-" before commands) # clean removes object files and target (ignore errors with "-" before commands)
clean: clean:
-rm -rf $(BUILDDIR) -rm -rf $(BUILDDIR)
-rm -rf $(INSTALLDIR)