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

标签 c++ visual-studio-2012 msbuild

我正在从事一个需要完整的多维配置矩阵的项目。 Theres (Debug/Release/Optimized/Final), (Editor/Non-Editor), (Win32/Win64/iOS/Android), (USA/Europe/Asia) 等等。都有不同的构建目标(即 win32_europe_debug_editor.exe)和他们自己的一套库,包括,#defines 等等。

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

不幸的是,“不要这样安排你的项目”是我无法控制的 - 这是承包公司想要的方式,我们必须遵守这一点。

我知道通过 MSBuild 可以使这变得容易得多,但我只是希望找出是否有一种方法可以做到这一点,同时至少部分保留在 Visual Studio 界面中,就像团队的其他成员已经习惯了。这是一个足够棘手的设置,我想尽量减少他们必须承担的额外认知负担!

谢谢!

最佳答案

你不能在.sln文件中添加更多的参数,它固定只支持两个——平台和配置。如果您希望 Visual Studio 使用产品的不同参数,您有两种选择。

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

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, ... }

这当然有可扩展性问题,所以它只适用于少量的附加参数。另请注意,类似的扩展平台参数选择的尝试可能不会奏效,因为许多目标仅适用于平台属性的标准值。

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 的位置
  • 设置 IDE_EDITOR_TYPE=Editor
  • 设置 IDE_REGION_TYPE=欧洲
  • devenv MySolution.sln

以这种方式启动的 VS IDE 将使用这些设置来执行构建、调试、Intellisense 等。顺便说一句,当你更改参数时,Intellisense 需要重新构建,最简单的方法是删除文件 MySolution.sdf 在启动 devenv 之前。

关于c++ - 如何在 Visual Studio 中支持复杂的项目配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552171/

相关文章:

c++ - ShellExecute无法在Windows XP中打开特殊文件夹?

c# - 应用程序在调试中启动了100%,但在现实生活中却没有

msbuild - 是否有任何 MSBuild 属性显示我们正在发布?

c++ - 将 IP 地址从 sockaddr_in6 转换为 in_addr

c++ - 如何在 Visual Studio 中使用 mongodb-cxx-driver 设置项目

c++ - 在 visual studio 2012 中包含 Eigen 库

c# - Entity Framework 代码生成策略 - Nullable varchar 与 Non-Nullable varchar

c++ - 通过 msbuild exec 在 C++ 中对控制台输出进行颜色处理

msbuild - 如何强制 msbuild 忽略警告 MSB8012

c++ - 多种数据类型的C++列表。遗产?