Welcome to the CPMake Home Page.
Home of the Cross Platform Make Utility.
last updated July 19, 2007
What is CPMake?
CPMake is a make utility written in Java to make anything (C, C++, Java, C#, XSL ...)
CPMake works similar to GNU make in that is uses rules and dependencies to build
a project. CPMake uses Java scripting languages (BeanShell, Rhino, Jython and Groovy)
for the build files to give increased flexability and the ability to customize
the make file to your project.
- Make files work on any platform that supports Java.
- CPMake has built in dependency tracking for C/C++ and Java projects.
- Build files have access to all of the Java classes.
- Easy to debug build files.
- Multi threaded processing of build file.
- Cross platform paths. Use '\' or '/' Java doesn't care.
For questions and comments please send an email to the source forge mailing list.
CPMake Source forge Project
Or Send me an email and tell me what you think.
- This project is still alive.
I've been in the midst of trying to get a thesis done and I've been a bit swamped.
There really needs to be a 1.4 release soon as there is a lot of new stuff checked in. Keep checking back.
- 1.3.1 is released.
List of some additions besides bug fixes:
- Added exec methods that take String arrays
- Added copy rules with message params to print while copying files
- The debug option prints creates a file dependency.txt that shows all target dependencies
- Changed the exec method to split strings internaly instead of using the Java routine.
With this change quoted strings will be parsed as one parameter. (see splitString method)
- Added grep method on CPMake class.
- 1.3 is released. I know what happend to 1.2?
I'm changing the releases to be more frequent. Most of the changes are
not bug fixes but enhancements so you are likely to see version 1.3.1 etc very
A Heap of new stuff is in this release. Here is a short list:
- Faster build times. I profiled CPMake and cut some fat.
- Added a copy rule
- Add Rhino to the supported scripting languages
- Added environment variable to change the cache dir
- 1.2 beta 2 is released.
This beta contains a ton of stuff I added while creating a build script for
another project. The most notable changes are
- Allows both explicit and pattern rules for the same target
- Added a combine method to combine string arrays
- Allows multiple pattern rules for the same target. CPMake picks
the one where the prerequisite exists.
- Added a method to change the class path at runtime
- Ability to exclude files in the createFileList api
- Added copy rules
- 1.2 beta 1 is released.
1.2 contains the dependency checking code for C/C++ and Java projects.
Also if the cpmake.jar file is in the class path you can run cpmake now by
just calling "java make".
- Ok the faults with the +M option in Jikes are to big to ignore.
Lets take the classic example: Class A uses class B that uses class C. If A is
updated no one cares but A. If B is updated both A and B should be rebuilt.
Now what should happen if C is updated? The answer is that B and C should be
rebuilt. Unfortunately the +M option seems to think that A, B and C should all
So I dug up a spec on the class file format and wrote a parser for it and shazam!
CPMake now does a very good job of dependency tracking for Java files. Best part
is that it does it without you having to do anything special to the make file and
with any compiler. If you want to play with this feature check out the code from CVS.
- Now I've done it. In my quest to add dependency checking
for java files I came to the conclusion that the only way to know what a java
file includes is to either write a java parser <yuck> or analize the class
files after they have been built. But then I started playing around with Jikes
and I have struck gold. Jikes has a +M option that generates make dependency files
for the compiled class files. CPMake has a method for parsing these types of files.
I put the two together in a build file and I hit pay dirt. It works awesome, except
the +M option has a few bugs in it that I had to work around inside of CPMake.
Guess I'll have to turn my attention to the Jikes project next and fix it up.
So to make a long story short with CPMake you can compile java code with good dependency
tracking. I will shortly post a tutorial on writing a java build file and I will
include how to use Jikes with the +M option.
- I'm currently having trouble getting the groovy build
script examples to work. I have posted a message to the groovy people but with
no reply. Currently CPMake is unable to call into the script to perform biuld
- CPMake now does dependency checking. At least it works
for C/C++ code. I want to add a dependency checker for Java before I check this
in. The dependency checking will be made available in a 1.2 release of CPMake.
- Added auto clean to the 1.2 code. This is realy cool.
CPMake can clean up a project based on the rules for the targets. More information
in the documentation section.
- Documentation is finally completed
- Added a new make file to samples area.
- Added support for Jython and Groovy script.