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

Last reviewed: July 17, 1997
Article ID: Q59409
1.01 1.11 1.12 1.13 1.20 1.30 1.40 | 1.11 1.12 1.13 1.21
MS-DOS                             | OS/2
kbtool kberrmsg

The information in this article applies to:

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

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" (without quotation marks). 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.
    


Additional reference words: kbinf kbinf 1.20 1.30 1.40
KBCategory: kbtool kberrmsg
KBSubcategory: NmakeIss
Keywords : kb16bitonly


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: July 17, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.