Highlights
Alcatel-Lucent nmake lu3.6 Released
Version lu3.6 was released on June 20, 2003 for all Tier 1 and Tier 2 platforms and includes over 35 fixes and enhancements. For a full list of changes see the release notes. The significant new features include the following:
- Jar file support
- The new
:JAR:assertion builds and maintains jar files, with support for viewpathing, index files, and manifest files. The rules are different and have enhanced features over what we previously published in the newsletters. For details see the release notes and :JAR: man page. - Batched Concurrent Java Builds
- Previously batched java compiles could not be run concurrently. Batched, concurrent java builds are now supported for additional performance boost. For details see the release notes.
STC Services
Give your existing system a tune-up, or Jumpstart your new nmake system: The Software Technology Center (STC) offers a number of services that can help you maximize the benefits of using nmake. For projects new to using nmake, we offer a service to help define your build process and establish nmake based build environment. Projects that have been using nmake for a while can benefit from our Build Process Assessment, Build Improvement Service, and on demand consultation. If you are interested in receiving more information about these services, please contact Anna Bieszczad at 732-332-6837 or annab@lucent.com.
New Look for the Technical Web Site
The nmake technical web site has a new look. We hope the new layout and organization makes it easier to use and navigate. Cascading style sheets are being used for much of the layout, however the site is designed to degrade gracefully for browsers without full style sheet support (eg. Netscape 4.x) and should still function properly, but look different, in such browsers. If you have any troubles or suggestions please drop us a note.
Technical Notes
Windows NT/2000 Beta Testers
We are still looking for beta testers for our Windows® NT/2000 port (using the UWIN environment). Our current projection for beta is by the end of this year. If you are interested please contact us at nmake@alcatel-lucent.com.
File Types
Results from our last customer survey suggested that we provide built-in support for more file types (eg 4GL, Java types, etc). We are interested in more feedback and would like to hear any suggestions or needs you have in this area. Please send us comments to nmake@alcatel-lucent.com.
Distinct Probe Files
The nmake probe facility stores probe
configuration files based on the path to the compiler, which allows
different configuration files for different compilers. However it is
sometimes desirable to store more discrete configuration files based on
additional criteria. This can be accomplished using the
VERSION_ENVIRONMENT environment variable.
The VERSION_ENVIRONMENT environment variable is a colon
separated list of environment variables for probe to consider when generating
the configuration filename hash. This can be used for probe to keep different
configuration files based on OS version, project, user, etc.
Here is an example showing how to keep different probe configuration files
for different OS versions. This is useful if you install nmake on a file
server and, for example, run it on different versions of Solaris. The
following will cause nmake generate and access different probe configuration
files for different values of $OS_VERSION.
$ export VERSION_ENVIRONMENT=OS_VERSION $ export OS_VERSION=$(uname -sr)
Multiple variables can be specified to further distinguish the probe files.
$ export VERSION_ENVIRONMENT=OS_VERSION:PROJECT:RELEASE
Tidbits
Using the :MAKE: operator
The :MAKE: operator is used for recursing a build tree.
By using this operator it is unnecessary to write rules to recurse into
the sub-directories. Here are some ways :MAKE: can be used.
By default all sub-directories are build:
$ ls -l total 24 -rw-r--r-- 1 richb richb 16 Jul 31 10:37 Makefile drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 ax drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 bx drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 cx drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 dy drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 ey -rw-r--r-- 1 richb richb 28 Jul 31 10:34 file.mk drwxr-xr-x 2 richb richb 4096 Jul 31 10:35 fy $ cat Makefile :MAKE: $ nmake ax: + : building /home/richb/n15/src/ax bx: + : building /home/richb/n15/src/bx cx: + : building /home/richb/n15/src/cx dy: + : building /home/richb/n15/src/dy ey: + : building /home/richb/n15/src/ey fy: + : building /home/richb/n15/src/fy
Typical use for :MAKE: is to build a list of
sub-directories by specifying the directories to visit on the RHS.
$ cat Makefile :MAKE: ax bx cx $ nmake ax: + : building /home/richb/n15/src/ax bx: + : building /home/richb/n15/src/bx cx: + : building /home/richb/n15/src/cx
Shell patterns can be specified:
$ cat Makefile :MAKE: *x $ nmake ax: + : building /home/richb/n15/src/ax bx: + : building /home/richb/n15/src/bx cx: + : building /home/richb/n15/src/cx
You can even use shell patterns to tell it what not to build:
$ cat Makefile :MAKE: !([af]*) $ nmake bx: + : building /home/richb/n15/src/bx cx: + : building /home/richb/n15/src/cx dy: + : building /home/richb/n15/src/dy ey: + : building /home/richb/n15/src/ey
You can recurse directly to another makefile:
$ cat Makefile :MAKE: *x file.mk *y $ nmake ax: + : building /home/richb/n15/src/ax bx: + : building /home/richb/n15/src/bx cx: + : building /home/richb/n15/src/cx file.mk: + : building file.mk dy: + : building /home/richb/n15/src/dy ey: + : building /home/richb/n15/src/ey fy: + : building /home/richb/n15/src/fy
By using the recurse engine variable with the -j
(parallel jobs) option you can recurse to multiple directories and makefiles
at the same time. This example allows up to 4 simultaneous recursions.
$ nmake recurse=4 -j4 ax: bx: file.mk: cx: + : building /home/richb/n15/src/ax + : building /home/richb/n15/src/bx + : building file.mk + : building /home/richb/n15/src/cx dy: ey: fy: + : building /home/richb/n15/src/dy + : building /home/richb/n15/src/ey + : building /home/richb/n15/src/fy
You can enforce more control by using the "-" special atom
to synchronize the build. Everything before the "-" will be
completed before continuing. In this example file.mk not
built until ax, bx and cx are
complete, and the remaining directories are not built until
file.mk is finished. Notice how the output differs from
the previous run.
$ cat Makefile :MAKE: *x - file.mk - *y $ nmake recurse=4 -j4 ax: bx: cx: + : building /home/richb/n15/src/ax + : building /home/richb/n15/src/bx + : building /home/richb/n15/src/cx file.mk: + : building file.mk dy: ey: fy: + : building /home/richb/n15/src/dy + : building /home/richb/n15/src/fy + : building /home/richb/n15/src/ey
You can clobber everything to clean up:
$ nmake recurse clobber ax: + ignore rm -f Makefile.mo Makefile.ms bx: + ignore rm -f Makefile.mo Makefile.ms cx: + ignore rm -f Makefile.mo Makefile.ms file.mk: + ignore rm -f file.mo file.ms dy: + ignore rm -f Makefile.mo Makefile.ms ey: + ignore rm -f Makefile.mo Makefile.ms fy: + ignore rm -f Makefile.mo Makefile.ms + ignore rm -f Makefile.mo Makefile.ms