在多个平台的解决方案中构建 Visual Studio C++ 项目

Posted

技术标签:

【中文标题】在多个平台的解决方案中构建 Visual Studio C++ 项目【英文标题】:Build visual studio C++ project within solution for multiple platforms 【发布时间】:2020-05-06 16:55:12 【问题描述】:

我有一个包含多个 C# 项目和一个 C++ 项目的 Visual Studio 解决方案。

C++ 项目已正确配置为针对 x64 和 win32 构建(具有单独的输出目录、针对 32 和 64 的正确二进制文件等),默认配置为 x64。为任何 CPU 配置 C# 项目。

在构建整个解决方案时,如何配置我的解决方案以构建适用于 x64 和 win32 的 C++ 项目?

P.S.:批量构建在这种情况下无法完成工作,因为我需要以任何人克隆 repo 的方式进行配置,无需任何额外设置即可正确构建

【问题讨论】:

我认为您可以通过右键单击您的解决方案并选择Batch Build 为您的解决方案使用Batch Build。然后为x64 和win32 配置这些C++ 项目,然后构建单击构建.然后,当您打开解决方案时,Debug/Release 文件夹仅适用于 win32,而 x64 文件夹`仅适用于 x64 【参考方案1】:

如何配置我的解决方案以构建适用于 x64 的 C++ 项目 和 win32 构建整个解决方案时?

请使用批量构建来构建您的解决方案。

1) 首先右键单击您的解决方案并选择批量构建

2) 其次,检查您要构建的 C++ 项目。然后,您可以检查项目的 64 位和 32 位,还可以为 Configuration 选择 DebugRelease。最后点击Build或Rebuild,同时生成不同版本的输出文件。

3) 完成后,请打开解决方案文件夹。在我这边,DebugRelease 文件夹仅适用于 32 位,而 x64 文件夹仅适用于 64 位

更新 1

由于您不想配置 VS 设置然后使用 Batch Build,我认为您可以在 xxxx.vcxproj 文件中使用自定义构建目标。

将这些目标添加到整个解决方案中所有 C++ 项目的xxxx.vcxproj

<Target Name="BuildFunction" AfterTargets="Build">
    <MSBuild Condition="'$(Platform)'=='Win32'" Projects="$(MSBuildProjectFile)" Properties="Platform=x64;PlatFormTarget=x64" RunEachTargetSeparately="true"  />
    <MSBuild Condition="'$(Platform)'=='x64'"   Projects="$(MSBuildProjectFile)" Properties="Platform=Win32;PlatFormTarget=x86" RunEachTargetSeparately="true" />
  </Target>

  <Target Name="CleanAll" AfterTargets="Clean">
    <MSBuild Condition="'$(Platform)'=='Win32'" Projects="$(MSBuildProjectFile)" Targets="Clean" Properties="Platform=x64;PlatFormTarget=x64" RunEachTargetSeparately="true"  />
    <MSBuild Condition="'$(Platform)'=='x64'"   Projects="$(MSBuildProjectFile)" Targets="Clean" Properties="Platform=Win32;PlatFormTarget=x86" RunEachTargetSeparately="true" />

  </Target>

这些目标取决于BuildClean 目标。因此,当您构建项目时,它们总是会稍后执行并将项目构建到另一个版本中。

此外,此方法与您的解决方案相关联,因此当其他人克隆您的解决方案时,直接从您的脚本构建或在 VS IDE 中单击 构建,然后您会看到 x64 和 @987654336 @ 解决方案中文件的版本。

希望对您有所帮助。

【讨论】:

谢谢,但是有了这个解决方案,任何克隆 repo 的人都必须这样做。而且由于我们使用脚本来构建解决方案,因此我需要能够在从脚本构建时同时构建这两种解决方案 很抱歉没有注意到您的新要求。我认为您可以在所有 C++ 项目的xxx.vcxproj 文件中使用一些自定义目标,然后只需使用您的构建脚本或单击Build,您将看到x64x86 版本的输出文件。跨度> 非常感谢! :D @PerryQian-MSFT MSBuild 目标的东西对我有用,除了现在我在构建 .vcxproj 作为我的解决方案的一部分时遇到 MSB4006 错误(而不是在构建 .vcxproj 时没有错误通过它自己)。 .vcxproj 必须是其中一个 C# 项目的依赖项,我认为它与此有关。但是构建成功完成,只是它报告了错误。有什么办法可以摆脱这个错误?

以上是关于在多个平台的解决方案中构建 Visual Studio C++ 项目的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Visual Studio 2013 中构建多个项目

Visual Studio中的c ++并行构建行为[重复]

从一个 Visual Studio 项目构建多个版本的静态库

MSBuild:从 Visual Studio 中构建解决方案后运行目标

从 Visual Studio 生成 CMakeLists.txt

SSIS 项目在 Visual Studio 中构建,但不是来自 Devenv 命令行