让我首先表达我的理解,即我正在尝试做的事情不正常,通常也不是很好的建议。我完全知道在普通 XML 中,该"
字符是保留的。
我正在.vcxproj
使用 Qt 应用程序生成要在 Visual Studio 2010 中使用的文件。我正在利用QXmlStreamWriter
该类来编写项目文件所需的 XML。但是,由于 Microsoft 不遵守 XML 标准,我遇到了问题。
在CustomBuild
元素中,用户需要指定构建文件的命令。对于 Visual Studio 中的 Qt 项目,您最终会得到如下内容:
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "..\myproj\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_SQL_LIB -DQT_OPENGL_LIB -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_SVG_LIB "-I." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\Qt3Support" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtTest" "-I..\myproj"</Command>
令人讨厌,但c'est la vie,尤其是与微软。不幸的是,我的QXmlStreamWriter
对象产生了这个(完全兼容的)输出:
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe" "%(FullPath)" -o "..\myproj\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_XML_LIB -DQT_SQL_LIB -DQT_OPENGL_LIB -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_SVG_LIB "-I." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\Qt3Support" "-I$(QTDIR)\include\QtSvg" "-I$(QTDIR)\include\QtTest" "..\myproj"</Command>
当然,Visual Studio 并没有留下深刻的印象。我在这里有什么选择?我可能可以读回文件并取消转义,但这听起来不是特别有效或智能。