Trouble with Filenames With a Dollar Sign ($) in Inline Files
| Article ID | : | 59409 |
| Last Review | : | October 23, 2003 |
| Revision | : | 2.0 |
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:
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:
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. |
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 |
