Using a file as a target in more than one description block causes NMAKE to end. You can overcome this limitation by using two colons (::) as the target/dependent separator instead of one colon.
The following description block is permissible:
X :: A command X :: B command
The following causes NMAKE to end:
X : A command X : B command
It is permissible to use single colons if the target/dependent lines are grouped above the same commands. The following is permissible:
X : A X : B command
Double colon (::) target/dependent separator example
target.lib :: a.asm b.asm c.asm
ml a.asm b.asm c.asm
ilib target a.obj b.obj c.obj
target.lib :: d.pli e.pli
pli d.pli
pli e.pli
ilib target d.obj e.obj
These two description blocks both update the library named target.lib. If any of the assembly-language files have changed more recently than the library file, NMAKE executes the commands in the first block to assemble the source files and update the library. Similarly, if any of the PL/I language files have changed, NMAKE executes the second group of commands to compile the PL/I files and update the library.