一个包含多个对象的源 我正在使用MSVS 2010,我有一个C ++源文件,必须编译成2个对象文件。 这些编辑之间的差异对于其中一个而言是“#define UNICODE”,而对另一个则不然。 我不能(也不想)使用模板。
目前,我在项目中使用了3个源文件。 实际的源代码从构建中排除,而另外2个是围绕它的包装器。 像这样:
file = wrap-UNICODE.cpp
#ifndef UNICODE
#define UNICODE
#endif
#include "actual-source.cpp"
// eof
file = wrap-ANSI.cpp
#ifdef UNICODE
#undef UNICODE
#endif
#include "actual-source.cpp"
// eof
使用makefile时,我可以使用不同的输出轻松避免使用包装器 开关。 我的问题是,我想知道是否(以及如何)我可以直接在MSVS项目中这样做。
答案 0 :(得分:1)
如果我正确理解你想做什么,这是可能的。 我有MS Visual Studio 2005标准版;这是我如何做到这一点(你可能需要调整这个,如果你有一个不同的版本,或者它可能甚至不适用于你的版本;我希望你的计算机不爆炸:))。
第一步需要手动编辑项目文件。打开项目文件(在我的机器上称为stuff.vcproj
)并复制提及文件的行:
<File
RelativePath=".\actual-source.cpp"
>
</File>
<File
RelativePath=".\actual-source.cpp"
>
</File>
然后,将项目加载到MSVS中。转到解决方案资源管理器(我机器上的Ctrl + Alt + L);该项目将显示两个名称相同的文件。打开每个属性页(我机器上的Alt + F7)并添加您想要的任何差异(例如预处理器定义)。
您还必须为目标文件设置不同的名称:在同一窗口(Property Pages)中选择Output Files,Object File Name,并添加不同的名称(例如actual-source-unicode
; MSVS将添加.obj
编译时的扩展名)。如果你不这样做,两个obj文件将具有相同的名称,一个将覆盖另一个。
答案 1 :(得分:0)
AFAIK您可以在解决方案中创建多个版本。只需进入解决方案的配置管理器(应该可以从解决方案的上下文菜单访问)。
通过这种方式,您还可以避免使用两个版本的文件。在两种配置中以不同方式设置定义选项就足够了。
答案 2 :(得分:0)
如果您打算构建unicode应用程序,Visual Studio会为您定义_UNICODE。
答案 3 :(得分:0)
为什么不简单地为两个版本使用不同的配置(如Luca Martini所提到的),然后使用Batch Build?然后,您可以以任何方式比较编译的输出。