在多个平台的解决方案中构建 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 选择 Debug
或 Release
。最后点击Build或Rebuild,同时生成不同版本的输出文件。
3) 完成后,请打开解决方案文件夹。在我这边,Debug
或 Release
文件夹仅适用于 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>
这些目标取决于Build
或Clean
目标。因此,当您构建项目时,它们总是会稍后执行并将项目构建到另一个版本中。
此外,此方法与您的解决方案相关联,因此当其他人克隆您的解决方案时,直接从您的脚本构建或在 VS IDE 中单击 构建,然后您会看到 x64
和 @987654336 @ 解决方案中文件的版本。
希望对您有所帮助。
【讨论】:
谢谢,但是有了这个解决方案,任何克隆 repo 的人都必须这样做。而且由于我们使用脚本来构建解决方案,因此我需要能够在从脚本构建时同时构建这两种解决方案 很抱歉没有注意到您的新要求。我认为您可以在所有 C++ 项目的xxx.vcxproj
文件中使用一些自定义目标,然后只需使用您的构建脚本或单击Build
,您将看到x64
和x86
版本的输出文件。跨度>
非常感谢! :D
@PerryQian-MSFT MSBuild 目标的东西对我有用,除了现在我在构建 .vcxproj 作为我的解决方案的一部分时遇到 MSB4006 错误(而不是在构建 .vcxproj 时没有错误通过它自己)。 .vcxproj 必须是其中一个 C# 项目的依赖项,我认为它与此有关。但是构建成功完成,只是它报告了错误。有什么办法可以摆脱这个错误?以上是关于在多个平台的解决方案中构建 Visual Studio C++ 项目的主要内容,如果未能解决你的问题,请参考以下文章
在 MS Visual Studio 2013 中构建多个项目
从一个 Visual Studio 项目构建多个版本的静态库
MSBuild:从 Visual Studio 中构建解决方案后运行目标