# SYNOPSIS:
#
# make [all] - makes everything.
# make run - run all unit tests
# make clean - removes all files generated by make.
include Makefile.files
include Makefile.config
# Some shortcut variables
StdCppFlags := $(CPPFLAGS) $(TENSOR_CPPFLAGS) $(ODEINT_CPPFLAGS)
TestCppFlags := $(StdCppFlags) $(GTEST_CPPFLAGS) $(GMOCK_CPPFLAGS)
StdLdFlags := $(LDFLAGS) $(TENSOR_LDFLAGS)
TestLdFlags := $(StdLdFlags) $(GTEST_LDFLAGS)
all: run-tests
# clean targets
clean: clean-src clean-deploy clean-test clean-doc
clean-src:
rm -f $(LibObj)
clean-deploy:
rm -f $(WavepacketLib)
clean-test:
rm -f $(GtestLib)
rm -f $(TestLib)
rm -f $(TestProg)
rm -f $(TestObj)
rm -f $(TestLibObj)
clean-doc:
rm -rf built-doc
# Build the doxygen documentation; Requires doxygen and the graphvix package (dot program)
build-doc:
doxygen $(DoxygenConfig)
# Build and deploy the library
$(WavepacketLib): $(LibObj)
ar rv $@ $^
$(LibObj):%.o:%.cpp
$(CXX) -c $(StdCppFlags) -I$(IncludeDir) $(CXXFLAGS) -o $@ $^
# Build and run the tests.
# Note that there are two ways:
# 1. run-tests first builds all tests, then runs them
# 2. Specifying one or more test names relative to $(TestDir) builds and runs only
# these tests. Useful for skipping the relatively slow linking against
# googletest for unused tests. This is the $(RunTests) rule
run-tests: $(TestProg)
cd $(TestDir); for mytest in $(RunTests); do $$mytest $(GTestFlags); done
$(RunTests):%:$(TestDir)/%
cd $(TestDir) $(GTestFlags) && $@
$(TestProg):%:%.o $(TestLib) $(GtestLib) $(WavepacketLib)
$(CXX) -o $@ $^ $(TestLdFlags)
$(TestObj):%.o:%.cpp
$(CXX) -c $(TestCppFlags) -I$(IncludeDir) -I$(TestDir) $(CXXFLAGS) -o $@ $^
$(GtestLib):
$(CXX) -o $(TestDir)/gtest-all.o $(GTEST_CPPFLAGS) $(GMOCK_CPPFLAGS) -c $(GTEST_DIR)/src/gtest-all.cc
$(CXX) -o $(TestDir)/gmock-all.o $(GTEST_CPPFLAGS) $(GMOCK_CPPFLAGS) -c $(GMOCK_DIR)/src/gmock-all.cc
ar -rv $(GtestLib) $(TestDir)/gmock-all.o $(TestDir)/gtest-all.o && rm -f $(TestDir)/gtest-all.o $(TestDir)/gmock-all.o
$(TestLib): $(TestLibObj)
ar -rv $(TestLib) $^
$(TestLibObj):%.o:%.cpp
$(CXX) -c $(TestCppFlags) -I$(IncludeDir) -I $(TestDir) $(CXXFLAGS) -o $@ $^
.PHONY: clean clean-src clean-deploy clean-test clean-doc run-tests $(RunTests)