Microsoft KB Archive/59409

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

Article ID: 59409

Article Last Modified on 10/23/2003

-

APPLIES TO


 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.2
 * Microsoft Program Maintenance Utility 1.3
 * Microsoft Program Maintenance Utility 1.4
 * Microsoft Program Maintenance Utility 1.4
 * Microsoft Program Maintenance Utility 1.4
 * Microsoft Program Maintenance Utility 1.4
 * Microsoft Program Maintenance Utility 1.4
 * Microsoft Program Maintenance Utility 1.4

-



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:  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-

  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 query words: kbinf 1.20 1.30 1.40

Keywords: kb16bitonly KB59409

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.