c++ - 避免 Visual Studio 项目的过多配置

标签 c++ visual-studio configuration msbuild

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

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

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

最佳答案

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

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

所以在你的 csproj 中:

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

默认情况下包括 Python,仅当设置了正确的构建类型时才包括 MPI。配置或平台设置成什么并不重要,您可以调整 bool 逻辑以适应每个构建类型的每个库。

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

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

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

关于c++ - 避免 Visual Studio 项目的过多配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675259/

相关文章:

C++ 正则表达式,解析

visual-studio - Visual Studio 2012 在启动时自动打开特定文件

visual-studio - Visual Studio 2010 的 Smart Paster 插件

c# - VS Express 2013 RC for Web - 系统找不到指定的文件错误

c# - 注入(inject)应用程序配置的最佳方式

Php7-fpm 未在 Centos7 中运行

c++ - WinInet 和 InternetOpen

c++ - Stringstream 解析逗号分隔的整数

c# - 配置方法中的asp net core请求服务返回null

C++ 简单 Hook 和隐藏命令提示符