将预处理程序符号定义为包含空格的字符串

时间:2015-02-25 13:14:33

标签: visual-c++ makefile preprocessor whitespace

我正在处理需要使用MS Visual Studio 2008 SP1的遗留项目(在C中,如果这很重要)。

具体来说,工具链中的一个工具会生成一个MSVC makefile(.mak),然后由MSVC2008中的向导将其转换为项目文件(.vcproj),在该文件中可以对其进行编译/调试。

我正在尝试定义一个预处理器符号(/D),它通过模板makefile设置为等于环境变量。此环境变量的值是一个字符串,可能包含空格。

我无法通过实验或谷歌找到合适的语法。该向导似乎以一种不那么可预测的方式搞乱了引号和空格......例如,如果我放入(生成的)makefile

/D "MYSYMBOL=\"my string\"" /D "MYOTHERSYMBOL=\"someOtherString\"

Visual Studio的向导错误地将以下内容放在项目文件中:

/D /D "MYSYMBOL=\" my string\"" "MYOTHERSYMBOL=\" someOtherString\"

(请注意转义引号后的空格)。

类似地:

input : /D "MYSYMBOL=\"my string\"" /D "MYOTHERSYMBOL=\"someOtherString\"
output: /D /D "MYSYMBOL=\" my string\"" "MYOTHERSYMBOL=\" someOtherString\" 

input : /D"MYSYMBOL=\"my string\"" /D"MYOTHERSYMBOL=\"someOtherString\"
output: /D"MYSYMBOL=\"my /D"MYOTHERSYMBOL=\"someOtherString\" string\""

input : /DMYSYMBOL=\"my string\" /DMYOTHERSYMBOL=\"someOtherString\
output: /DMYSYMBOL=\"my /DMYOTHERSYMBOL=\"someOtherString\" string\"

input : /DMYSYMBOL="""my string""" /DMYOTHERSYMBOL="""someOtherString"""
output: /DMYSYMBOL="""my /DMYOTHERSYMBOL="""someOtherString""" string"""

...etc. 

有办法做到这一点吗?或者我应该完全遵循一个完全不同的方法来获取环境变量?

0 个答案:

没有答案