2013-07-06 7 views
8

Io uso msbuild a riga di comando per creare un file di soluzione generato:Forza MSBuild per costruire un progetto che è selezionata in soluzione config

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

Il problema è che la soluzione generata da CMake ha un progetto INSTALLARE che è non costruito per impostazione predefinita.

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) 

Come posso forzare la destinazione dell'installazione da costruire senza aprire manualmente il soultion e impostare la casella di controllo per la configurazione?

Una soluzione è quella di chiamare il file vcproj direttamente (come ho fatto qui)

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

ma questo stampa il 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. 

Come si può vedere, la build è riuscita. Sono in grado di garantire la build corretta chiamando prima la soluzione, ma voglio che lo forzi la soluzione per creare anche il progetto INSTALL.

Qualche idea?

+1

Sono quasi sicuro che sia impossibile. E la soluzione che hai già trovato sembra abbastanza buona no?In alternativa non puoi usare qualcosa come "cmake --build --target install"? È passato un po 'di tempo da quando ho usato cmake ma mi sembra di ricordare che puoi invocare msbuild etc per te invece di farlo manualmente. – stijn

+0

grazie mille, postalo come risposta e accetterò questa come soluzione valida. – Beachwalker

risposta

9

Per quanto ne so, questo non è possibile. Osservando le opzioni della riga di comando di msbuild e nel file di soluzione, non c'è nulla che lo supporti. Ma dal momento che stai usando cmake, puoi usarlo per costruire tutto per te senza doverlo fare manualmente. Ho trovato this thread che chiede fondamentalmente la stessa domanda, come voi, e ha la sintassi corretta utilizzando l'idea già lo metto il commento:

cmake --build . --target install 

Guardando un po 'più lontano, dalle opzioni della riga devenv cmmand Sembra che deve avere la funzionalità che stai cercando. Questo costringe una build del progetto dato, anche se non è abilitata nel Configuration Manager:

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

se si desidera che cmake compili in modalità di rilascio, si consiglia di utilizzare: "cmake --build. --target install --config Release" – debris

+0

Funziona per VS2008! Grazie mille signore! – agodinhost

+0

Il trucco 'devenv' funziona ancora in VS2015. Grazie! – shoelzer

3

stijn's answer è il modo "idiomatica" degli obiettivi di costruzione attraverso cmake.

Nota che MSbuild può creare entrambi i file di progetto e il file di progetto. Invece di chiamare msbuild zlib.sln, puoi anche chiamare msbuild ALL_BUILD.vcxproj.

Analogamente, è possibile chiamare msbuild INSTALL.vcxproj.

+0

L'ho già fatto (vedi il mio codice pubblicato). Ma questo lancia avvertimenti. – Beachwalker

+1

@Beachwalker. Scuse ... Dovrebbe funzionare con VS2010 o versioni successive. Non ho notato che stavi creando file "pre-VS2008" vcproj ... –

2

Utilizzando la soluzione generata da CMake versione 3.2.2, non è effettivamente possibile creare la destinazione INSTALL da msbuild attraverso la soluzione. La causa principale è che per la destinazione dell'installazione, la soluzione contiene solo le voci come quelle nella GlobalSection sezione (ProjectConfigurationPlatforms):

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

Se si aggiungono le voci come questi:

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

allora diventa possibile per compilare il target INSTALL con un comando come questo:

msbuild <pathToProject>.sln /target:INSTALL 
Problemi correlati