2013-07-06 3 views
8

I msbuild auf der Kommandozeile verwenden, um eine erzeugte Lösung Datei zu erstellen:Kraft msbuild ein Projekt zu bauen, die in Lösung Config nicht ausgewählt ist

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

Das Problem ist, dass die von cmake erzeugte Lösung ein Projekt INSTALL hat was nicht standardmäßig erstellt.

Wie kann ich das Ziel INSTALL erzwingen, um zu bauen, ohne manuell die Auflösung zu öffnen und das Kontrollkästchen für die Config?

Eine Lösung ist direkt die vcproj Datei aufrufen (wie ich hier tat)

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

aber druckt die Warnung

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. 

Wie Sie sehen können, gelang es dem Build. Ich bin in der Lage, den korrekten Build zu gewährleisten, indem ich zuerst die Lösung anrufe, aber ich möchte die Lösung erzwingen, um das Projekt INSTALL zu erstellen.

Irgendwelche Ideen?

+1

Ich bin mir ziemlich sicher, dass das unmöglich ist. Und die Workaround, die Sie bereits gefunden haben, scheint gut genug zu sein, nein?Als Alternative können Sie nicht etwa "cmake --build --target install" verwenden? Es ist schon eine Weile her, seit ich Cmake benutzt habe, aber ich kann mich erinnern, dass Sie msbuild usw. für Sie aufrufen können, anstatt es manuell zu tun. – stijn

+0

vielen Dank, post als Antwort und ich werde dies als gültige Lösung akzeptieren. – Beachwalker

Antwort

9

Soweit ich weiß, ist das nicht möglich. Wenn Sie sich die Befehlszeilenoptionen von msbuild und die Lösungsdatei ansehen, gibt es nichts, was sie unterstützt. Aber da Sie cmake verwenden, können Sie damit alles für Sie erstellen, ohne es manuell tun zu müssen. Ich fand this thread die im Grunde wie Sie die gleiche Frage stellt, und die richtige Syntax, um die Idee bereits mit mir den Kommentar setzen:

cmake --build . --target install 

Blick etwas weiter von den devenv cmmand Zeilenoptionen scheint es das hat Funktionalität, die Sie suchen. Dies zwingt einen Build des gegebenen Projektes auch wenn es nicht in der Configuration Manager aktiviert ist:

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

Wenn Sie CMake im Freigabemodus erstellen möchten, können Sie verwenden: "cmake --build. - Zielinstallation --config Release" – debris

+0

Es funktioniert für VS2008! Vielen Dank, mein Herr! – agodinhost

+0

Der 'devenv' Trick funktioniert immer noch in VS2015. Vielen Dank! – shoelzer

3

stijn's answer ist die „idiomatische“ Art und Weise des Bauens Ziele durch cmake.

Beachten Sie jedoch, dass MSbuild die beiden Projektdateien und Projektdateien erstellen kann. Anstatt msbuild zlib.sln aufzurufen, können Sie auch msbuild ALL_BUILD.vcxproj anrufen.

In ähnlicher Weise können Sie msbuild INSTALL.vcxproj anrufen.

+0

habe ich schon gemacht (siehe meinen geposteten Code). Aber das wirft Warnungen. – Beachwalker

+1

@Beachwalker. Entschuldigung ... Es sollte mit VS2010 oder höher funktionieren. Ich habe nicht bemerkt, dass Sie "pre-VS2008" vcproj-Dateien erstellt haben ... –

2

Mit der von CMake Version 3.2.2 generierten Lösung ist es in der Tat nicht möglich, das INSTALL-Ziel von msbuild über die Lösung zu erstellen. Die Ursache ist, dass für das Ziel installieren, werden nur die Lösung enthält Einträge wie die im Abschnitt GlobalSection (ProjectConfigurationPlatforms):

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

Wenn Sie Einträge wie diese hinzu:

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

Dann wird es möglich, Um das INSTALL-Ziel mit einem Befehl wie folgt zu erstellen:

msbuild <pathToProject>.sln /target:INSTALL 
Verwandte Themen