| # Mention default target. | |
| all: | |
| # Implicit rule to compile C++ files. Modify to your taste. | |
| %.o: %.cc | |
| g++ -c -O2 -Wall -Wextra -pedantic $< | |
| # Components of the library. | |
| library-objects = \ | |
| BigUnsigned.o \ | |
| BigInteger.o \ | |
| BigIntegerAlgorithms.o \ | |
| BigUnsignedInABase.o \ | |
| BigIntegerUtils.o \ | |
| library-headers = \ | |
| NumberlikeArray.hh \ | |
| BigUnsigned.hh \ | |
| BigInteger.hh \ | |
| BigIntegerAlgorithms.hh \ | |
| BigUnsignedInABase.hh \ | |
| BigIntegerLibrary.hh \ | |
| # To ``make the library'', make all its objects using the implicit rule. | |
| library: $(library-objects) | |
| # Conservatively assume that all the objects depend on all the headers. | |
| $(library-objects): $(library-headers) | |
| # TESTSUITE (NOTE: Currently expects a 32-bit system) | |
| # Compiling the testsuite. | |
| testsuite.o: $(library-headers) | |
| testsuite: testsuite.o $(library-objects) | |
| g++ $^ -o $@ | |
| # Extract the expected output from the testsuite source. | |
| testsuite.expected: testsuite.cc | |
| nl -ba -p -s: $< | sed -nre 's,^ +([0-9]+):.*//([^ ]),Line \1: \2,p' >$@ | |
| # Run the testsuite. | |
| .PHONY: test | |
| test: testsuite testsuite.expected | |
| ./run-testsuite | |
| testsuite-cleanfiles = \ | |
| testsuite.o testsuite testsuite.expected \ | |
| testsuite.out testsuite.err | |
| # The rules below build a program that uses the library. They are preset to | |
| # build ``sample'' from ``sample.cc''. You can change the name(s) of the | |
| # source file(s) and program file to build your own program, or you can write | |
| # your own Makefile. | |
| # Components of the program. | |
| program = sample | |
| program-objects = sample.o | |
| # Conservatively assume all the program source files depend on all the library | |
| # headers. You can change this if it is not the case. | |
| $(program-objects) : $(library-headers) | |
| # How to link the program. The implicit rule covers individual objects. | |
| $(program) : $(program-objects) $(library-objects) | |
| g++ $^ -o $@ | |
| # Delete all generated files we know about. | |
| clean : | |
| rm -f $(library-objects) $(testsuite-cleanfiles) $(program-objects) $(program) | |
| # I removed the *.tag dependency tracking system because it had few advantages | |
| # over manually entering all the dependencies. If there were a portable, | |
| # reliable dependency tracking system, I'd use it, but I know of no such; | |
| # cons and depcomp are almost good enough. | |
| # Come back and define default target. | |
| all : library $(program) |