Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Force msbuild to build a project which is unselected in solution config

I use msbuild at command line to build a generated solution file:

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

The problem is that the solution generated by cmake has a project INSTALL which is not built by default.

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)

How can I force the target INSTALL to be build without manually open the soultion and set the checkbox for the config?

One solution is to call the vcproj file directly (as I did here)

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

but this prints the warning

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.

As you can see, the build succeeded. I'm able to ensure the correct build by calling the solution first, but I want to force the solution to build the project INSTALL, too.

Any ideas?

like image 512
Beachwalker Avatar asked Jul 06 '13 15:07

Beachwalker


2 Answers

As far as I know this is not possible. Looking at msbuild's command line options and in the solution file, there's nothing to support it. But since you're using cmake, you can use it to to build everything for you without having to do it manually. I found this thread which basically asks the same question as you, and has the correct syntax using the idea already I put it the comment:

cmake --build . --target install

Looking somewhat further, from the devenv cmmand line options it seems it does have the functionality you're after. This forces a build of the given project even if it's not enabled in the Configuration Manager:

devenv build\zlib\vc-9.0\x86\zlib.sln /Build Release /project INSTALL
like image 156
stijn Avatar answered Oct 04 '22 01:10

stijn


stijn's answer is the "idiomatic" way of building targets through cmake.

Note however that MSbuild can build both solution files and project files. Instead of calling msbuild zlib.sln, you could also call msbuild ALL_BUILD.vcxproj.

Similarly, you can call msbuild INSTALL.vcxproj.

like image 22
André Avatar answered Oct 04 '22 00:10

André