ID Number: Q61808
1.11 | 1.11
MS-DOS | OS/2
buglist1.11 fixlist1.12
Summary:
In an NMAKE description file, applying the "!" (exclamation point)
operator to the beginning of a command line using the macro "$?"
should cause the command to be executed once for every out-of-date
dependent file. In version 1.11 of NMAKE (shipped with C version
6.00), the $? macro evaluates to the list of every dependent,
regardless of whether it is out of date or not. This is not the
correct behavior.
Microsoft has confirmed this to be a problem in NMAKE version 1.11.
This problem was corrected in NMAKE version 1.12.
More Information:
To re-create this problem, save the following lines to a file called
MAKEFILE:
new.lib: a.obj b.obj c.obj
!lib $@-+$?;
Assuming that only A.OBJ is out of date with respect to NEW.LIB, the
following will be produced upon running NMAKE:
1. NMAKE 1.00 or 1.12:
lib new.lib-+a.obj;
2. NMAKE 1.11:
lib new.lib-+a.obj
lib new.lib-+b.obj
lib new.lib-+c.obj
Example 1 above shows the correct function of the $? macro.
Fortunately, the problem above is easy to correct. NMAKE performs
correctly if two colons (::) are placed after the target NEW.LIB on
the dependency line. The NMAKE file may be rewritten as follows so
that the $? macro will work with NMAKE 1.11:
new.lib::a.obj b.obj c.obj
!lib $@-+$?;
The use of the $? macro is described on page 108 of the "Microsoft C
Advanced Programming Techniques" manual included with C version 6.00.
The use of the two colons on the dependency line is described on page
109.