Targets in Multiple Description Blocks

To update a target in more than one description block using different commands, specify two consecutive colons (::) between targets and dependents. For example:

target.lib :: one.f90 two.f90 three.f90
    df one.f90 two.f90 three.f90
    lib target one.obj two.obj three.obj
target.lib :: four.c five.c
    df /c four.for five.for
    lib target four.obj five.obj

Dependency Side Effects

If a target is specified with a colon (:) in two dependency lines in different locations, and if commands appear after only one of the lines, NMAKE interprets the dependencies as if adjacent or combined. It does not invoke an inference rule for the dependency that has no commands, but instead assumes that the dependencies belong to one description block and executes the commands specified with the other dependency as follows:

This... ...is evaluated as this

bounce.exe : jump.obj
   echo Building
bounce.exe...
bounce.exe : up.obj

bounce.exe : jump.obj
up.obj
   echo Building
bounce.exe...

This effect does not occur if :: is used as follows:

This... ...is evaluated as this

bounce.exe :: jump.obj
   echo Building
bounce.exe...

bounce.exe :: up.obj

bounce.exe : jump.obj
   echo Building
bounce.exe...

bounce.exe : up.obj
# invokes an inference rule