Given that many people think of make as the standard software construction tool, we feel that it's useful to compare our product to modern makes. |
|
Introduction | |||||||||||||||||||||||||||||
The QEF tool kit is comprised of many software tools, which support a robust and rich software process. Many people will initially expect that QEF is substantially similar to make. As such it is necessary for us to compare the QEF product to make, which we do in this article. The comparison will look at QEF and make with respect to:
The coverage is not complete; there are many issues beyond the scope of this presentation. The above represent the key issues that must be covered when evaluating processes used to convert your resources (your source and its maintainers) into your income (the product). Build Configuration and Parameterization Controls |
|
| A construction system should provide mechanisms to specify, control, check, distribute and use parameters, options, and controls required in software construction. Make provides just the following: VAR=VALUE # setting (via makefile or command line) ${VAR} # use (only within the makefile itself) This has the following short comings:
QEF uses a program called qvrs which interprets a set of files that specify parameter and configuration controls on a per-directory basis. qvrs:
User Interface |
|
| Make:
QEF:
QEF encapsulates all information and processes in same interface -- ``All you ever say is "qef"!''. Construction Expression |
|
| Make is a declarative assembler language.
Within make, ``what you see is ALL you get!'' QEF provides a fully featured extensible construction process programming language qsg, with simple natural expressions such as: program hello.c parser.y commands shell.sh man1.1 lex.l finstall -d DestDir/data file.txt library -n dtree @src This simple expression automatically implements standard qef operations like:
Operations are implemented via a script library, which is easily extended to support project or company specific processes. The average size of the construction files across 600 directories across 3 projects at Sietec/Toronto was 4 significant lines per directory. Dependency Expression |
|
| Definition: Dependency expression is the specification of the list of prerequisite files for a target (i.e., the files on or from which the targets depend or are produced). The use of the dependency relationships is discussed in the next section. Make dependencies are static, user generated, and counter-intuitive. Ad-hoc mechanisms, such as makedepends are expensive, and not incorporated into the build automatically. QEF provides a generalized mechanism (incls) for extracting full transitive closure source implied dependencies, which are recalculated any time relevant source is changed. The mechanism currently supports C, C++, Class, troff, m4, f77, Pascal, bcpl, and SQL; and easily extended for additional languages (without recompiling programs). A standard tool is provided to view the dependencies for a specified file. Model Of Consistency |
|
| Definition: A consistency model is a set of rules applied to determine if a recipe needs to be executed. Make recipe applied:
This is insufficient. QEF's consistency engine applies a recipe given that its targets are requested or required to build a requested target (that needs to be built -- more later):
The history file used to preserve previously used recipes and time stamps also records the reason that the recipe was last applied. The qef consistency model also supports:
Additional Tools and Features |
|
| Many important and powerful features of qef have not been covered as they do not have make equivalents. QEF supports, indeed encourages, total separation of the source and object trees without changing the construction specification (qeffile). This allows multiple configurations to be built from the same source directories (no need to copy the source to the build tree). The only difference between two different build trees will be in the construction configuration (conf.vrs). Viewpath support also means that an individual developer's modified source can be completely separated from the shared master source, without copying or duplicating unmodified files. Caches for information generated during the construction process, such as dependencies, timestamps, recipes, and consistency rationale, mean that subsequent constructions are both efficient and complete. Powerful tools for use within qef scripts are provided:
Build Cycle Time |
|
| Due to the improved control QEF offers and parallel execution, QEF builds are almost always at least 30% times faster than makes doing the same builds. Most organizations have been able to reduce the build cycle time 30 to 50 percent. However the real payoff occurs due to the improved build management and single pass nature of QEF. At sites that use Imake we have achieved reductions of 80 to 90 percent. This is due to the elimination of the exceedingly slow create Makefile passes that incorporate the snail-like mkdepends. Furthermore the use of QEF's qefdirs means that directories are only processed if there is processing to be done, whereas make managed builds will visit each and every directory for each type of construction whether there is anything to do or not. |
qefvsmake.qh - 1.19 - 03/11/04 |