From 6451cf08b54528305b081a5ddf710af0e2da6ce1 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 1 Jun 2014 09:07:07 +0200 Subject: [PATCH] make follow source dependencies --- alib2/makefile | 52 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/alib2/makefile b/alib2/makefile index cc0515fe3e..d8f590fcbb 100644 --- a/alib2/makefile +++ b/alib2/makefile @@ -1,42 +1,52 @@ -CC=g++ -LIBRARY=libalib2.so -TESTBIN=alib2test -CCFLAGS= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/ -LDFLAGS= -shared -lxml2 -TEST_CCFLAGS= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -I../alib2/src -I/usr/include/libxml2/ -TEST_LDFLAGS= -L../alib2/lib -lxml2 -lalib2 -lcppunit -Wl,-rpath,. +SHELL:=/bin/bash +LIBRARY:=libalib2.so +TESTBIN:=alib2test +CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/ +LDFLAGS:= -shared -lxml2 +TEST_CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -I../alib2/src -I/usr/include/libxml2/ +TEST_LDFLAGS:= -L../alib2/lib -lxml2 -lalib2 -lcppunit -Wl,-rpath,. -SOURCES=$(shell find src/ -name *cpp) -OBJECTS=$(patsubst src/%.cpp, obj/%.o, $(SOURCES)) +SOURCES:=$(shell find src/ -name *cpp) +OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(SOURCES)) +DEPENDENCIES:=$(patsubst src/%.cpp, obj/%.d, $(SOURCES)) -TEST_SOURCES=$(shell find test-src/ -name *cpp) -TEST_OBJECTS=$(patsubst test-src/%.cpp, test-obj/%.o, $(TEST_SOURCES)) +TEST_SOURCES:=$(shell find test-src/ -name *cpp) +TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(TEST_SOURCES)) +TEST_DEPENDENCIES:=$(patsubst test-src/%.cpp, test-obj/%.d, $(TEST_SOURCES)) -.PHONY: all -.PHONY: test +.PHONY: all build test clean +.PRECIOUS: $(DEPENDENCIES) $(TEST_DEPENDENCIES) all: build test lib/$(LIBRARY): $(OBJECTS) - mkdir -p lib - $(CC) $(OBJECTS) -o $@ $(LDFLAGS) + mkdir -p lib; + $(CXX) $(OBJECTS) -o $@ $(LDFLAGS); -obj/%.o: src/%.cpp +obj/%.d: mkdir -p $(dir $@) - $(CC) $(CCFLAGS) $< -o $@ + echo "$(shell sha1sum <<< "$@" | sed "s/ -//g") = \$$(shell \$$(CXX) -MM \$$(CXXFLAGS) $(patsubst obj/%.d,src/%.cpp, $@) | sed \"s/.*://g\" | sed \"s/\\\\\\\\//g\")" >> $@ + echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/ -//g"))" >> $@ + echo " \$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@ build: lib/$(LIBRARY) test-bin/$(TESTBIN): $(TEST_OBJECTS) lib/$(LIBRARY) - mkdir -p test-bin - $(CC) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS) + mkdir -p test-bin; \ + $(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS); \ -test-obj/%.o: test-src/%.cpp +test-obj/%.d: mkdir -p $(dir $@) - $(CC) $(TEST_CCFLAGS) $< -o $@ + echo "$(shell sha1sum <<< "$@" | sed "s/ -//g") = \$$(shell \$$(CXX) -MM \$$(TEST_CXXFLAGS) $(patsubst test-obj/%.d,test-src/%.cpp, $@) | sed \"s/.*://g\" | sed \"s/\\\\\\\\//g\")" >> $@ + echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/ -//g"))" >> $@ + echo " \$$(CXX) \$$(TEST_CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@ test: test-bin/$(TESTBIN) LD_LIBRARY_PATH=lib test-bin/$(TESTBIN) clean: $(RM) -r *.o *.d lib obj test-bin test-obj + +-include $(DEPENDENCIES) +-include $(TEST_DEPENDENCIES) + -- GitLab