The following bugs were in nmake 3.0 and now fixed in nmake 3.1:
The value of variables assigned on the command line does not remain in the .mo files to affect subsequence of nmake execution. For example,
nmake CCFLAGS=-g nmake
for the above sequence of execution of nmake, the -g flag in CCFLAGS only affect the first issue of nmake, but won't now affect the second issue of nmake.
:INSTALLDIR: now handles rhs files with relative path name.
$(ETCDIR) :INSTALLDIR: ../../../a
The value of the variables with .REMAIN special atom is now handled correctly in viewpathing.
The common action, clobber, can correctly clobber when there is more than one -g option on the command line, such as
nmake -g rules1.mk -g rules2.mk clobber
Parsing problem that when special symbols, like $ and : appeared in include statements, as in
has been fixed.
For generated files, the scanning now occurs after the files are generated. The correct -I flags are now produced correctly for generated header files in viewpathing.
The problem of rebuilding libraries when some .o files are not removed after archiving has been fixed. Now handles the change of the prerequisites of archive targets properly. It deletes the .o files from the archive targets in the top view when those .o's are no longer dependencies of the targets.
The -ptr flags are now given correctly for C++ template instantiation at link time in viewpathing.
The problem of having one extra directory level in $(VROOT) has been fixed.
The problem of re-generating .JOINT multiple targets in viewpathing has been fixed.
The -I list in CCFLAGS now is according to all the prerequisites of current target, not just according to the first prerequisite.
The metarule %:%.c now works for C++ files.
The problem of handling aliasing when, for example, a and ../X/a are the same file has been fixed.
The circular dependency assertion such as
a.h : a.c <generate> $(<)
where a.h is a dependency of a.c is now handled correctly.