Trouble with Filenames With a Dollar Sign ($) in Inline Files (59409)



The information in this article applies to:

  • Microsoft NMAKE Utility for MS-DOS 1.01
  • Microsoft NMAKE Utility for MS-DOS 1.1
  • Microsoft NMAKE Utility for MS-DOS 1.11
  • Microsoft NMAKE Utility for MS-DOS 1.12
  • Microsoft NMAKE Utility for MS-DOS 1.13
  • Microsoft NMAKE Utility for MS-DOS 1.2
  • Microsoft NMAKE Utility for MS-DOS 1.3
  • Microsoft NMAKE Utility for MS-DOS 1.4
  • Microsoft NMAKE Utility for OS/2 1.01
  • Microsoft NMAKE Utility for OS/2 1.11
  • Microsoft NMAKE Utility for OS/2 1.12
  • Microsoft NMAKE Utility for OS/2 1.13
  • Microsoft NMAKE Utility for OS/2 1.21

This article was previously published under Q59409

SUMMARY

If you use a filename that contains a dollar sign ($) in a NMAKE description file, you can use the escape character (^) to tell NMAKE that the dollar sign is part of your filename, not a macro character. However, to use the dollar sign in an inline response file or as a literal character in a command, use two dollar signs ($$) instead.

MORE INFORMATION

Consider the following NMAKE description file:
  all:test^$.exe

   test^$.obj: test^$.c
      cl /c test^$.c

   test^$.exe: test^$.obj
      link @<<
            test^$.obj,
            test^$.exe,
            NUL,;
      <<
				


In this file, the escape character (^) is used to tell NMAKE that the $ is part of the filename TEST$.* and does not denote a macro. When TEST$.C is compiled, everything works correctly. However, the inline response file for LINK does not work as expected. NMAKE does not interpret the ^ character, but instead passes it on to LINK.EXE. LINK then tries to link TEST^$.OBJ instead of TEST$.OBJ and fails. If you eliminate the ^ to pass TEST$.OBJ to link, NMAKE fails. NMAKE version 1.4 generates the following error:
U1002: syntax error: invalid macro invocation '$'
The following presents two methods to work around this situation:
  1. Use an external response file. Change the LINK command in the make file to something similar to LINK @FILE.RES. You can put the filename TEST$.OBJ directly in the response file. -or-

  2. Use $$ as the escape sequence in the inline response file and in other command blocks instead of ^$. For example, change the example above as follows:
       
    link @<<
              test$$.obj,
              test$$.exe,
              NUL,;
          <<
    						
    NMAKE correctly passes TEST$.OBJ to LINK.

Modification Type:MajorLast Reviewed:10/23/2003
Keywords:kb16bitonly KB59409