I have a make file and I am trying to use it to copy files to a directory. The path of the directory is stored in an environment variable. The problem is when I run make the C:\Data from the environment variable is interpreted as C:Data. How do I stop this being intrepreted as an escape character?
copyData : buildData
cp Release/*.tbl $(DATA)/index
results in:
cp Release/*.tbl C:\Data/index
cp: `C:Data/index': specified destination directory does not exist
Try `cp --help' for more information.
Actually, using forward slashes is the best, and correct, solution. Windows utilities always support forward slashes so it works, and trying to remember to always quote pathnames to avoid issues with backslashes is a major hassle.
In this case the first thing to note is that the problem is not a problem with
make.makeis passing the right content to the shell; it’s the shell which is parsing the backslash as an escape character.As I said above the right answer is to use forward slashes BUT if you want to allow people to use backslashes you’ll have to go through your makefile and quote all arguments where a backslash might appear. For example:
will fix your immediate problem.
If you have just a couple of these variables you could also do something like:
then remember to use
$(QDATA)where you wanted the quoted value:PS. Use forward slashes!! 🙂