避免Visual Studio项目的配置太多

时间:2009-03-23 21:13:47

标签: c++ visual-studio configuration msbuild

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

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

编辑:也许CMake更像是我在寻找什么?我很想听听任何CMake用户的消息......

3 个答案:

答案 0 :(得分: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中是否可行?

注意:没有Reference元素,如果它只包含在内容中,这种方法仍然可以使用。

答案 1 :(得分:0)

如果右键单击Visual Studio中的解决方案并选择Configuration Manager,则可以为每个配置创建构建目标。

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

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

答案 2 :(得分:0)

我所知道的并没有很好的解决方案。 IDE似乎需要为工具的每组命令行参数配置。因此,如果需要N个不同的参数集 - 听起来就像这里的情况那样 - 将需要N个不同的配置。这就是IDE的工作方式,它出现了。

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

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