Makefile mit automatischen Buildnummern
-
Endlich mal wieder etwas Freizeit...
Ich wollte automatische Buildnummern erzeugen und nach einige Wutanfällen und mehreren Flaschen Bier geht es nun. Sicher gibt es noch was zu verbessern, die Basis war das "optimale Makefile für jedes Projekt".
SHELL := /bin/bash TARGET := ../build/program BUILD_NUMBER := $(shell echo $(shell cat .BuildCounter)+1 | bc) CXXFLAGS := -g -Wextra -Wall -Wno-long-long -pedantic-errors -std=c++98 -fstack-protector-all -D__BUILD_DATE=$(shell date +'%Y%m%d') -D__BUILD_NUMBER=$(BUILD_NUMBER) CXX := g++ LIBS := EXT := cpp BUILDDIR := ../build override BUILDDIR := $(strip $(BUILDDIR)) SOURCES := $(wildcard *.$(EXT)) OBJECTS := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES)) DEPS := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES)) .PHONY: all all: $(TARGET) $(TARGET): $(OBJECTS) $(DEPS) $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) @$(shell echo $(BUILD_NUMBER) > .BuildCounter) ifneq ($(MAKECMDGOALS), clean) -include $(DEPS) endif $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag $(CXX) $(CXXFLAGS) -c $< -o $@ $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag mkdir -p $(dir $(@)) @if ! test -f .BuildCounter ; then echo 0 > .BuildCounter; fi $(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@ %.tag: mkdir -p $(dir $(@)) touch $@ run: $(TARGET) .PHONY: clean clean: rm -rf $(BUILDDIR)
Dazu der Aufruf:
static const unsigned long BUILD_DATE = __BUILD_DATE; static const unsigned long BUILD_NUMBER = __BUILD_NUMBER;
Tipps, Kritik oder vernichtendes Urteil?
-
Mit Ant geht das in 1 bzw. 2 Zeilen.