1 Cmm's build system
2 Basic make commands
3 Running individual tests
4 Specifying build-type
5 Generated files
6 Portability
7 Other build commands
8 Problems
All executables, examples and tests are built by running GNU make in the top-level cmm directory (the directory that contains this HTML file and makefile), specifying particular targets.
GNU make command | Explanation |
---|---|
make | Builds the cmm executable. |
make all | Builds the cmm executable. |
make test | Builds cmm and runs all tests. You should do this before using Cmm, to ensure that it is working correctly. I've adopted a test-first strategy with Cmm - for example, every bug I've encountered has been turned into a test. |
Tests can be run individually. For example, run make test5 to run test number 5. You can also run blocks of ten tests with (for example) make test30-39. See the makefile itself for details of the different tests.
Some useful tests are:
GNU make command | Explanation |
---|---|
make test5 | Checks that Cmm can parse one of its own pre-processed source files and output identical text |
make test30 | Builds the simple example cmm programme examples/overlap/main.cmm. |
make test99 | Generates statistics for looking up a dispatch using different caches - see examples/speed/main2.cmm. |
make test100 | Runs different configurations of the programme in file examples/speed/main.cmm. |
By default, the makefile will build gcc-debug versions - compilation/linking will use gcc with the -g flag. To build a release version, add top_build=gcc-release to the make command.
All generated files have the build-type and the host system's type embedded in their filenames. For example, the generated cmm executable from make all on my machine is cmm.gcc2.95-debug.OpenBSD-i386.exe.
The Cmm programme is written in plain C++, and should build on any
reasonably up-to-date C++ development environment supporting exceptions,
namespaces, streams and the Standard Library containers including
std::stringstream
. The main source files are in the directory cmm/, with some utility code in the directory utils/.
For example, with gcc 2.95.3 or gcc 3.2, you can simply do: g++ -o cmm.exe cmm/*.cpp utils/*.cpp to create a usable cmm exectuable. The makefile provided does lots of extra things such as running tests and examples automatically, plus full header-file dependency handling.
Cmm 0.26 has been tested on OpenBSD/gcc-2.95.3, OpenBSD-3.2/gcc-3.2 and cygwin/gcc-3.2.
Cmm version 0.17 worked under a version of Linux (Slackware) circa Jan 2003 and various versions of Cmm have been tested on Debian Linux and FreeBSD 5.1.
These are for building add-hierprof in the cmm2 directory:
gmake add-hierprof -s top_build=gcc-debug
These are for building/running a profiled cmm, using the add-hierprof command generated above:
gmake cmm top_build=gcc-release-hierprof top_debug= -s 2>&1|more
gmake testdir/test20.OpenBSD3.3-i386.cmm.ii-gcc2.95.3-release.OpenBSD3.3-i386.cmm
time ./cmm.gcc2.95.3-release-hierprof.OpenBSD3.3-i386.exe -errorlevel 000 -parsefile testdir/test20.OpenBSD3.3-i386.cmm.ii-gcc2.95.3-release.OpenBSD3.3-i386.cmm 2>hpout
If you have problems, please send me details (email to jules@op59.net), and I'll try to fix them for you.