| 1 | # |
| 2 | # Matt McCutchen's Big Integer Library |
| 3 | # |
| 4 | |
| 5 | include mage.mk |
| 6 | |
| 7 | # Mention default target. |
| 8 | all : |
| 9 | |
| 10 | # Implicit rule to compile C++ files. Modify to your taste. |
| 11 | $(call mg-rule,%.o,%.cc,g++ -c -O -Wall -Wextra -pedantic $$< -o $$@) |
| 12 | |
| 13 | # Components of the library. |
| 14 | library-objects = BigUnsigned.o BigInteger.o BigUnsignedInABase.o BigIntegerUtils.o |
| 15 | library-headers = NumberlikeArray.hh BigUnsigned.hh BigUnsignedInABase.hh BigInteger.hh BigIntegerLibrary.hh |
| 16 | |
| 17 | # To ``make the library'', make all its objects using the implicit rule. |
| 18 | library : $(library-objects) |
| 19 | |
| 20 | # Extra dependencies from `#include'. |
| 21 | $(call mg-prereq,BigUnsigned.o,NumberlikeArray.hh BigUnsigned.hh) |
| 22 | $(call mg-prereq,BigInteger.o,NumberlikeArray.hh BigUnsigned.hh BigInteger.hh) |
| 23 | $(call mg-prereq,BigUnsignedInABase.o,NumberlikeArray.hh BigUnsigned.hh BigUnsignedInABase.hh) |
| 24 | $(call mg-prereq,BigIntegerUtils.o,NumberlikeArray.hh BigUnsigned.hh BigUnsignedInABase.hh BigInteger.hh) |
| 25 | |
| 26 | # The rules below build a program that uses the library. They are preset to |
| 27 | # build ``sample'' from ``sample.cc''. You can change the name(s) of the |
| 28 | # source file(s) and program file to build your own program, or you can write |
| 29 | # your own Makefile. |
| 30 | |
| 31 | # Components of the program. |
| 32 | program = sample |
| 33 | program-objects = sample.o |
| 34 | |
| 35 | # Conservatively assume all the program source files depend on all the library |
| 36 | # headers. You can change this if it is not the case. |
| 37 | $(call mg-prereq,$(program-objects),$(library-headers)) |
| 38 | |
| 39 | # How to link the program. The implicit rule covers individual objects. |
| 40 | $(call mg-rule,$(program),$(program-objects) $(library-objects),g++ $$(program-objects) $$(library-objects) -o $$@) |
| 41 | |
| 42 | # Delete all generated files we know about. |
| 43 | clean : |
| 44 | rm -f $(library-objects) $(program-objects) $(program) |
| 45 | |
| 46 | # I removed the *.tag dependency tracking system because it had few advantages |
| 47 | # over manually entering all the dependencies. If there were a portable, |
| 48 | # reliable dependency tracking system, I'd use it, but I know of no such; |
| 49 | # cons and depcomp are almost good enough. |
| 50 | |
| 51 | # Come back and define default target. |
| 52 | all : library $(program) |