Visual Studio 在同一构建中引用多个项目配置

问题描述 投票:0回答:1

我有一个包含四个项目的 Visual Studio 2017 解决方案:一个共享静态 LIB (C++)、一个使用静态 dll 链接构建的 DLL (C++)、一个使用动态链接构建的 EXE (C++) 以及一个引用 DLL 和执行文件。 DLL 和 EXE 项目都引用静态 LIB 项目,但它们使用不同的链接选项来引用它。 LIB 项目必须构建两次,一次使用静态链接 (

/MT
),一次使用动态链接 (
/MD
),我通过不同的项目配置使其成为可能。如何组织我的解决方案以使构建设置变得简单直观?

我当前的解决方案是使用批量构建,以便构建两个 LIB 配置。 DLL项目直接引用LIB(两个项目都配置了静态CRT链接,

/MT
),EXE项目没有项目引用,但
LIB.lib
(使用
/MD
选项构建)手动添加到其他依赖项。但在我的所有其他项目中,我不使用批量构建,我担心将来我会忘记它并使用常规构建解决方案(Ctrl+Alt+B)构建解决方案,这将导致错误的构建。

visual-c++ dll visual-studio-2017
1个回答
0
投票

当您通过 GUI 添加项目引用时,

ItemGroup
会添加到项目文件中。该项目需要更改,并且需要添加
Properties
项目:

<ItemGroup>
  <ProjectReference Include="..\other_project_dir\other_project_name.vcxproj">
    <Project>{SOME-GUID-HERE}</Project>
    <Properties>Configuration=$(Configuration)</Properties>
  </ProjectReference>
</ItemGroup>

在我的例子中,

Configuration=$(Configuration)
恰好是所需的项目值。然而,这只是添加了一个引用,但并不强制在所需的配置中构建
other_project_name
。我们需要单独构建它,目标为
MSBuild

<Target Name="MyBeforeBuild" BeforeTargets="InitializeBuildStatus">
  <MSBuild Projects="..\other_project_dir\other_project_name.vcxproj"
           Properties="Configuration=$(Configuration)"
           Targets="Build" />
</Target>
© www.soinside.com 2019 - 2024. All rights reserved.