【问题标题】:Force msbuild to build a project which is unselected in solution config强制 msbuild 构建在解决方案配置中未选中的项目
【发布时间】:2013-07-04 11:11:17
【问题描述】:

我在命令行使用 msbuild 构建生成的解决方案文件:

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\zlib.sln

问题是cmake生成的解决方案有一个项目INSTALL默认不建。

minigzip:
  Die Datei "c:\Library\build\zlib\vc-9.0\x86\minigzip.tmp_Release_Win32.vcproj
  " wird gelöscht.
ALL_BUILD:
  Die Datei "c:\Library\build\zlib\vc-9.0\x86\ALL_BUILD.tmp_Release_Win32.vcpro
  j" wird gelöscht.
INSTALL:
  The project "INSTALL" is not selected for building in solution configuration
  "Release|Win32".
Done Building Project "c:\Library\build\zlib\vc-9.0\x86\zlib.sln" (default targ
ets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

如何在不手动打开灵魂并设置配置复选框的情况下强制构建目标安装?

一种解决方案是直接调用 vcproj 文件(就像我在这里所做的那样)

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\INSTALL.vcproj

但这会打印警告

Microsoft (R)-Buildmodul, Version 3.5.30729.6387
[Microsoft .NET Framework, Version 2.0.50727.6400]
Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten.

Build started 06.07.2013 17:07:57.
Project "c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj" on node 0 (default ta
rgets).
c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj : warning MSB4098: MSBuild is i
nvoking VCBuild to build this project. Project-to-project references between VC
++ projects (.VCPROJ) and C#/VB/VJ# projects (.CSPROJ, .VBPROJ, .VJSPROJ) are n
ot supported by the command-line build systems when building stand-alone VC++ p
rojects. Projects that contain such project-to-project references will fail to
build. Please build the solution file containing this project instead.
Done Building Project "c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj" (defaul
t targets).


Build succeeded.

如您所见,构建成功。我可以通过首先调用解决方案来确保正确构建,但我也想强制解决方案构建项目 INSTALL。

有什么想法吗?

【问题讨论】:

  • 我很确定这是不可能的。您已经找到的解决方法似乎足够好,不是吗?作为替代方案,您不能使用“cmake --build --target install”之类的东西吗?自从我使用 cmake 已经有一段时间了,但我似乎记得你可以让它为你调用 msbuild 等,而不是手动执行。
  • 非常感谢,将此作为答案发布,我将接受此作为有效解决方案。

标签: visual-studio msbuild cmake


【解决方案1】:

据我所知,这是不可能的。查看 msbuild 的命令行选项和解决方案文件,没有什么可以支持它。但是由于您使用的是 cmake,因此您可以使用它来为您构建所有内容,而无需手动进行。我发现this thread 基本上和你问了同样的问题,并且使用了正确的语法,我已经把它放在了评论中:

cmake --build . --target install

进一步看,从devenv 命令行选项看来,它确实具有您所追求的功能。即使未在配置管理器中启用,这也会强制构建给定项目:

devenv build\zlib\vc-9.0\x86\zlib.sln /Build Release /project INSTALL

【讨论】:

  • 如果你想让 cmake 在发布模式下构建,你可能需要使用:"cmake --build . --target install --config Release"
【解决方案2】:

stijn's answer 是通过 cmake 构建目标的“惯用”方式。

但请注意,MSbuild 可以同时构建解决方案文件项目文件。除了调用msbuild zlib.sln,您还可以调用msbuild ALL_BUILD.vcxproj

同样,您可以拨打msbuild INSTALL.vcxproj

【讨论】:

  • 我已经这样做了(请参阅我发布的代码)。但这会引发警告。
  • @Beachwalker。抱歉...它应该适用于 VS2010 或更高版本。我没有注意到您正在构建“VS2008 之前”的 vcproj 文件...
  • 谢谢,在 VS2017 中为我工作,即使是在主解决方案中依赖于其他项目的安装程序项目
【解决方案3】:

使用CMake 3.2.2版本生成的解决方案,确实无法通过该解决方案从msbuild构建INSTALL目标。根本原因是对于 INSTALL 目标,解决方案仅包含 GlobalSection(ProjectConfigurationPlatforms) 部分中的条目:

    {11C4D30A-3B6A-4350-BD7D-B343F3A843C0}.Debug|Win32.ActiveCfg = Debug|Win32

如果您添加这样的条目:

    {11C4D30A-3B6A-4350-BD7D-B343F3A843C0}.Debug|Win32.Build.0 = Debug|Win32

然后可以使用如下命令构建 INSTALL 目标:

    msbuild <pathToProject>.sln /target:INSTALL

【讨论】:

    【解决方案4】:

    最简单的方法是直接构建项目,但不要忘记指定配置和平台。

    msbuild /p:Configuration=Release /p:Platform=Win32 INSTALL.vcxproj

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2021-04-16
      相关资源
      最近更新 更多