Commit | Line | Data |
---|---|---|
918d66f2 | 1 | # Mention default target. |
0afe80d5 | 2 | all: |
918d66f2 MM |
3 | |
4 | # Implicit rule to compile C++ files. Modify to your taste. | |
0afe80d5 | 5 | %.o: %.cc |
ef2b7c59 | 6 | g++ -c -O2 -Wall -Wextra -pedantic $< |
e67d6049 | 7 | |
918d66f2 | 8 | # Components of the library. |
0afe80d5 MM |
9 | library-objects = \ |
10 | BigUnsigned.o \ | |
11 | BigInteger.o \ | |
12 | BigIntegerAlgorithms.o \ | |
13 | BigUnsignedInABase.o \ | |
14 | BigIntegerUtils.o \ | |
15 | ||
16 | library-headers = \ | |
17 | NumberlikeArray.hh \ | |
18 | BigUnsigned.hh \ | |
19 | BigInteger.hh \ | |
20 | BigIntegerAlgorithms.hh \ | |
21 | BigUnsignedInABase.hh \ | |
22 | BigIntegerLibrary.hh \ | |
918d66f2 MM |
23 | |
24 | # To ``make the library'', make all its objects using the implicit rule. | |
0afe80d5 MM |
25 | library: $(library-objects) |
26 | ||
27 | # Conservatively assume that all the objects depend on all the headers. | |
28 | $(library-objects): $(library-headers) | |
918d66f2 | 29 | |
0afe80d5 MM |
30 | # TESTSUITE |
31 | # Compiling the testsuite. | |
32 | testsuite.o: $(library-headers) | |
33 | testsuite: testsuite.o $(library-objects) | |
34 | g++ $^ -o $@ | |
35 | # Extract the expected output from the testsuite source. | |
36 | testsuite.expected: testsuite.cc | |
37 | sed -nre 's,^.*//,,p' $< >$@ | |
38 | # Run the testsuite. | |
39 | .PHONY: test | |
40 | test: testsuite testsuite.expected | |
41 | ./testsuite >testsuite.out | |
42 | @if diff -u testsuite.expected testsuite.out; then\ | |
43 | echo 'All tests passed.';\ | |
44 | else\ | |
45 | echo >&2 'At least one test failed!'; exit 1;\ | |
46 | fi | |
e67d6049 | 47 | |
918d66f2 MM |
48 | # The rules below build a program that uses the library. They are preset to |
49 | # build ``sample'' from ``sample.cc''. You can change the name(s) of the | |
50 | # source file(s) and program file to build your own program, or you can write | |
51 | # your own Makefile. | |
a8b42b68 | 52 | |
918d66f2 MM |
53 | # Components of the program. |
54 | program = sample | |
55 | program-objects = sample.o | |
e67d6049 | 56 | |
918d66f2 MM |
57 | # Conservatively assume all the program source files depend on all the library |
58 | # headers. You can change this if it is not the case. | |
59 | $(program-objects) : $(library-headers) | |
e67d6049 | 60 | |
918d66f2 MM |
61 | # How to link the program. The implicit rule covers individual objects. |
62 | $(program) : $(program-objects) $(library-objects) | |
0afe80d5 | 63 | g++ $^ -o $@ |
918d66f2 MM |
64 | |
65 | # Delete all generated files we know about. | |
05780f4b | 66 | clean : |
918d66f2 | 67 | rm -f $(library-objects) $(program-objects) $(program) |
e67d6049 | 68 | |
918d66f2 MM |
69 | # I removed the *.tag dependency tracking system because it had few advantages |
70 | # over manually entering all the dependencies. If there were a portable, | |
71 | # reliable dependency tracking system, I'd use it, but I know of no such; | |
72 | # cons and depcomp are almost good enough. | |
73 | ||
74 | # Come back and define default target. | |
75 | all : library $(program) |