避免 Visual Studio 项目的配置过多

Posted

技术标签:

【中文标题】避免 Visual Studio 项目的配置过多【英文标题】:Avoiding too many configurations for a Visual Studio project 【发布时间】:2009-03-23 21:13:46 【问题描述】:

我目前正在将一个大型 Linux 项目移植到 Visual Studio。该项目依赖于许多第三方库(Python、MPI 等)以及一些内部库。但它也可以在没有这些库的情况下构建,或者只使用其中的几个。所以我不想为每个可能的组合创建不同的配置,例如“Parallel with Python”、“Parallel without Python”等。组合太多了。这是我可以使用 MSBuild 的情况吗?

编辑:我考虑的一种可能性是创建一堆 .vsprops 文件,但这本质上与创建一堆不同的配置相同。

编辑:也许 CMake 更符合我的要求?我很想听听任何 CMake 用户的意见...

【问题讨论】:

我曾经遇到过这个问题,最后只是创建了配置。 12 调试,12 发布......不会痛苦。我希望添加评论可以解决问题 【参考方案1】:

一种方法是使用每个程序集 Reference 元素(Python、MPI 等)的 Condition 属性有条件地引用您的库。

这可以将您的库与配置和平台属性分开,并允许您在默认情况下或有条件地使用 MSBuild 属性来构建它们。

所以在你的 csproj 中:

<Reference Include="YourPythonLibrary" 
           Condition="$(BuildType) == '' Or $(BuildType) == 'TypeA'" />
<Reference Include="YourMpiLibrary" 
           Condition="$(BuildType) == 'TypeA' Or $(BuildType) == 'TypeB'" />

默认情况下包括 Python 和 MPI,前提是设置了正确的构建类型。配置或平台设置为什么无关紧要,您可以调整布尔逻辑以适合每种构建类型的每个库。

MSBuild /p:BuildType=TypeA
MSBuild /p:BuildType=TypeB

在条件下使用某种形式的按位运算会很好,但我不确定这在 MSBuild 中是否可行?

注意:不一定要引用元素,如果它只是作为内容包含,这种方法仍然有效。

【讨论】:

这适用于 Visual C++ 项目吗?我以前从未使用过 MSBuild,所以我真的不知道它的任何细节...... 哦,我以为你在说 C# 项目,对不起!不了解 C++,MSBuild 架构完全不同,因此您必须搜索 msdn.microsoft.com/en-us/library/y4sy8216.aspx 并查看您的特定引用类型是否具有等效的“条件”属性。 刚刚看了一眼,“UseInBuild”属性是“AssemblyReference”元素的布尔值,值得一试吗? Visual Studio 2010 for Visual C++ 项目将支持 MSBuild。【参考方案2】:

据我所知,没有好的解决方案。 IDE 似乎需要为工具的每组命令行参数进行配置。因此,如果需要 N 个不同的参数集——就像这里的情况一样——将需要 N 个不同的配置。这就是 IDE 的工作原理。

不幸的是,在与 Visual Studio 的战斗中很少有人能获胜,所以我个人总是让步并根据需要创建尽可能多的配置。这很痛苦,而且很繁琐,是的,IDE 理想情况下应该提供一些更好的机制来管理组合 - 但它是可行的,而且实际上不需要像当时感觉的那样长时间设置.

(据我了解,.vsprops 可以通过允许在配置之间轻松共享配置设置来减轻一些痛苦。因此 VS 中的那些微小文本框仅用于设置配置之间不同的设置。这可能让它们仍然值得研究。不过,这不是我自己使用过的东西;只是最近才发现的。)

【讨论】:

看起来直到 MSBuild 在 VS 2010 中支持 Visual C++ 项目,这是唯一的解决方案。【参考方案3】:

如果您在 Visual Studio 中右键单击解决方案并选择配置管理器,您可以为每个配置创建构建目标。

如果您有默认设置,您可以使用工具栏中的组合框在这些目标之间进行选择。

在使用 MSBuild 时也可以选择这些目标,就像在 Release 和 Debug 之间进行选择一样。

【讨论】:

这不能回答我的问题。无论使用哪个外部库,我都在构建相同的项目,例如如果我想使用 Python,我不会将 Python 构建为项目的一部分,我只需 #define HAVE_PYTHON 并包含/链接必要的文件。

以上是关于避免 Visual Studio 项目的配置过多的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 安装项目属性

visual studio code (vsc)中查看 php 数组的全部元素

visual studio (VS) 网站项目配置远程发布到IIS

Visual Studio单元测试和命令行参数,以避免源代码管理中的密码

使用 CMake 构建后,如何在 Visual Studio 中创建项目以使用 OpenMesh?

s-s-rS“报表服务器项目”不显示在 Visual Studio 2010 中