Just as you use macros to substitute text within a description file, you use the following syntax to substitute text within a macro:
$(macroname: string1 = string2)
Every occurrence of string1 is replaced by string2 in macroname. Spaces between the colon and string1 are considered part of string1. If string2 is a null string, all occurrences of string1 are deleted from the macro. The colon (:) must immediately follow macroname.
The replacement of string1 with string2 in the macro is not a permanent change. If you use the macro again without a substitution, you get the original unchanged macro.
Example
SOURCES = one.pli two.pli three.pli
program.exe : $(SOURCES:.pli=.obj)
ilink $**;
The example above defines a macro called SOURCES, which contains the names of three PL/I source files. With this macro, the target/dependent line substitutes the .obj extension for the .pli extension. Thus, NMAKE executes the following command:
ilink one.obj two.obj three.obj;
$** is a special macro that translates to all dependent files for a given target.