Introduction
KJam is a program construction tool, like make. KJam recursively builds target files from source files, using dependency
information and updating actions expressed in a user-provided jamfile, which is written in KJam's own interpreted language.
KJam is modelled after Jam/MR, a build tool developed by Chris Seiwald of Perforce Software. It operates in a way very similar to Jam and
its interpreted language is also very similar. KJam was developed in an effort to make significant improvements to Jam while still maintaining
its powerful minimalist design. KJam eliminates a number of Jam's legacy features, and concentrates on features designed to make it more useful and
more manageable for larger and more complex projects.
KJam is designed to be:
| Fast
| KJam is the fastest build system available today. It is the fastest for both full and incremental builds.
It has the fastest dependency scanner of any current build system. Even for projects with many thousands of files, KJam will finish scanning
and start building almost instantly. Unlike most current build systems, KJam is designed from the beginning to be multi-threaded, resulting
in maximum utilization of multi-processor workstations. Through the use of batched building, a built-in shell,
and parallel command execution KJam reduces build times radically. Jam was well known as one of the fastest build systems available.
Our performance tests show that KJam is faster.
|
| Scalable
| KJam is designed to support even the largest projects with hundreds of thousands of files. It may even be run as a distributed peer
network of build servers allowing projects to share the build load over a large heterogeneous network of build machines. KJam's dependency scanner
uses advanced caching techniques which make it especially efficient when dealing with very large numbers of targets. It has per target viewpathing.
|
| Unintrusive and Clean
| KJam is small. It has negligible CPU overhead, uses very little memory, and it doesn't create or leave behind temporary files.
|
| Automatic Dependencies
| KJam computes dependencies for its targets during building. There is no need for a separate off-line make depend step.
|
| A built-in sh-like Shell
| By default, on any platform, KJam runs its command scripts using its own built-in sh-like shell. This way developers can expect
a common set of minimal shell features on every platform. Using a built-in shell allows KJam to report errors in command
scripts which reference the errant command directly in the jamfile, something an external shell cannot do. It eliminates
another point of difference between multiple platforms making it easier to write actions which run on any platform. The internal shell
is also much faster. If necessary users may still specify an external shell for command scripts which require more features.
|
| Batched Building
| Some compilers, such as MSVC, support building multiple object files from multiple source files with a single invocation of the
compiler. This can result in dramatically reduced build times. Unlike most build software, KJam has complete support for building targets in batches.
|
| Customizable
| Developers can enhance and extend KJam by creating user defined rules to utilize other built-in directives.
|
| Language
| KJam includes flow-control statements, variables, and a few other features of general purpose languages.
|
| Multiplatform
| Platform independent rules and platform specific actions can be defined separately from dependency rules.
|
| Highly portable
| KJam currently runs on WindowsXP, Windows Vista, Linux and Apple Os X. It is designed to be easily portable.
|
| Improved Variable Expansion
| KJam's variable expansion is much more powerful than Jam's. In addition to having many more modifiers, KJam's variable
expansion can be controlled with full support for regular expressions. In general KJam uses regular expression syntax
wherever a matching pattern is required. In Jam there are a number of different restricted expression syntaxes used in
various places.
|
| Simplified Syntax
| With the addition of more powerful variable expansion it has been possible to remove a number of language features and maintain
equivalent expressive power. The KJam language is simpler. KJam allows named arguments in both rules and actions making the
code more readable. In addition the KJam parser is more flexible and more forgiving.
Braces are not required around blocks with just one statement.
|
| Better Reporting
| For large and complex build systems it is important to be able to diagnose problems easily. KJam has extensive and very detailed ways
of reporting its internal execution, allowing developers to zero in on problems with their build environment quickly. In multi-threaded
mode KJam keeps the output from different processes together instead of interspersing it. KJam can reformat all of its output, and the output of any
tools it runs to the width of your shell for improved readability.
|
While KJam is useful for projects of all sizes, it is designed to support large, complex projects.
KJam has been receiving an increasing amount of interest from
many of the largest and most respected software development companies.
Contact
To report bugs, request features or otherwise talk to the authors about KJam, send e-mail to kjam@oroboro.com