如何在Visual Studio中支持复杂的项目配置?

时间:2015-04-10 02:07:18

标签: c++ visual-studio-2012 msbuild

我正在开发一个需要整个多维配置矩阵的项目。 Theres(调试/发布/优化/最终),(编辑/非编辑),(Win32 / Win64 / iOS / Android),(美国/欧洲/亚洲)等。所有具有不同的构建目标(即win32_europe_debug_editor.exe)和他们自己的一套库,包括#defines等。

有没有办法在Visual Studio中向项目配置工具栏添加更多下拉列表?目前有“平台”和“配置”。我在平台上有win32 / win64 / ios / android,但仍有数十种不同的配置。

不幸的是,“不要像这样设置你的项目”,这是签约公司想要这样做的方式,我们一定会这样做。

我知道只需要通过MSBuild就可以轻松实现这一点,但我只是希望找到一种方法来实现它,至少部分保留在Visual Studio界面中,就像那样团队的其他成员习惯了。这是一个非常棘手的设置,我想尽量减少他们必须承担的额外认知负担!

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法在.sln文件中添加更多参数,它仅修复为仅支持两个 - 平台和配置。如果希望Visual Studio使用产品的不同参数,则有两种选择。

1.展开您的Configuration参数以包含其他值,例如多个集合的叉积。例如。对于您的情况,您的原始参数如下:

Configuration={Debug, Release, Optimised, Final}
Editor={Editor, NonEditor}
Region={USA, Europe}

您可以将它们转换为等效的配置选择:

Configuration={Debug_Editor_USA, Debug_Editor_Europe, Debug_NonEditor_USA, Debug_NonEditor_Europe, Release_Editor_USA, ... }

这当然具有可扩展性问题,因此它仅适用于少量附加参数。另请注意,扩展Platform参数选择的类似尝试可能不起作用,因为许多目标仅适用于Platform属性的标准值。

2.您可以在。** proj文件中保留其他参数,默认值可以覆盖环境变量。例如。如果您的解决方案中的每个项目都有以下部分:

<PropertyGroup>
    <EditorType Condition="'$(IDE_EDITOR_TYPE)' != ''">$(IDE_EDITOR_TYPE)</EditorType>
    <EditorType Condition="'$(EditorType)' != ''">NonEditor</EditorType>
    <RegionType Condition="'$(IDE_REGION_TYPE)' != ''">$(IDE_REGION_TYPE)</RegionType>
    <RegionType Condition="'$(RegionType)' != ''">USA</RegionType>
</PropertyGroup>

,然后可以通过设置env变量来覆盖其他参数的值,而默认值将是NonEditorUSA。要让VS IDE获取非默认值,您必须执行以下操作:

  • 打开VS cmd窗口
  • cd到.sln的位置
  • set IDE_EDITOR_TYPE=Editor
  • set IDE_REGION_TYPE=Europe
  • devenv MySolution.sln
以这种方式启动的VS IDE将使用这些设置来执行构建,调试,智能感知等.BTW,当您更改参数时,需要重建Intellisense,最简单的方法是在启动之前删除文件MySolution.sdf devenv的。