2012-03-15 115 views
1

我有一个make文件,我试图用它来将文件复制到一个目录。目录的路径存储在一个环境变量中。问题是,当我运行时,将来自环境变量的C:\ Data解释为C:Data。我如何阻止这个被解释为转义字符?在Make和Windows中使用环境变量来形成路径

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. 
+0

在环境变量中使用正斜杠? – 2012-03-15 15:08:59

+0

这样做的工作,但它似乎不是一个好的解决方案。任何其他想法? – Dunc 2012-03-15 15:17:50

+0

'DATA:= $(subst:,:/,$(DATA))''? – Beta 2012-03-15 17:59:39

回答

4

实际上,使用正斜杠是最好的和正确的解决方案。 Windows实用程序总是支持正斜杠,所以它的工作原理,并试图记住总是引用路径名以避免反斜杠问题是一个主要的麻烦。

在这种情况下,首先要注意的是该问题不是make的问题。 make正在将正确的内容传递给shell;它是shell它将反斜线解析为转义字符。

正如我上面所说的,正确的答案是使用正斜杠,但如果你想让人们使用反斜杠,你必须通过你的makefile并引用所有反斜杠可能出现的参数。例如:

copyData : buildData 
     cp Release/*.tbl '$(DATA)'/index 

将解决您的直接问题。

如果你只是一对夫妇这些变量,你也可以这样做:

QDATA = '$(DATA)' 

话,记得用$(QDATA),你想要的引用值:

copyData : buildData 
     cp Release/*.tbl $(QDATA)/index 

PS。使用正斜杠! :-)