Skip to content
Snippets Groups Projects
Commit 6451cf08 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

make follow source dependencies

parent 033aaa08
No related branches found
No related tags found
No related merge requests found
CC=g++ SHELL:=/bin/bash
LIBRARY=libalib2.so LIBRARY:=libalib2.so
TESTBIN=alib2test TESTBIN:=alib2test
CCFLAGS= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/ CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/
LDFLAGS= -shared -lxml2 LDFLAGS:= -shared -lxml2
TEST_CCFLAGS= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -I../alib2/src -I/usr/include/libxml2/ 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,. TEST_LDFLAGS:= -L../alib2/lib -lxml2 -lalib2 -lcppunit -Wl,-rpath,.
   
SOURCES=$(shell find src/ -name *cpp) SOURCES:=$(shell find src/ -name *cpp)
OBJECTS=$(patsubst src/%.cpp, obj/%.o, $(SOURCES)) OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(SOURCES))
DEPENDENCIES:=$(patsubst src/%.cpp, obj/%.d, $(SOURCES))
   
TEST_SOURCES=$(shell find test-src/ -name *cpp) TEST_SOURCES:=$(shell find test-src/ -name *cpp)
TEST_OBJECTS=$(patsubst test-src/%.cpp, test-obj/%.o, $(TEST_SOURCES)) 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: all build test clean
.PHONY: test .PRECIOUS: $(DEPENDENCIES) $(TEST_DEPENDENCIES)
   
all: build test all: build test
   
lib/$(LIBRARY): $(OBJECTS) lib/$(LIBRARY): $(OBJECTS)
mkdir -p lib mkdir -p lib;
$(CC) $(OBJECTS) -o $@ $(LDFLAGS) $(CXX) $(OBJECTS) -o $@ $(LDFLAGS);
   
obj/%.o: src/%.cpp obj/%.d:
mkdir -p $(dir $@) 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) build: lib/$(LIBRARY)
   
test-bin/$(TESTBIN): $(TEST_OBJECTS) lib/$(LIBRARY) test-bin/$(TESTBIN): $(TEST_OBJECTS) lib/$(LIBRARY)
mkdir -p test-bin mkdir -p test-bin; \
$(CC) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS) $(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS); \
   
test-obj/%.o: test-src/%.cpp test-obj/%.d:
mkdir -p $(dir $@) 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) test: test-bin/$(TESTBIN)
LD_LIBRARY_PATH=lib test-bin/$(TESTBIN) LD_LIBRARY_PATH=lib test-bin/$(TESTBIN)
   
clean: clean:
$(RM) -r *.o *.d lib obj test-bin test-obj $(RM) -r *.o *.d lib obj test-bin test-obj
-include $(DEPENDENCIES)
-include $(TEST_DEPENDENCIES)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment