2009-01-31 11 views
88

Sto analizzando il ciclo di checkout, generazione, distribuzione, test e commit per una soluzione C++ di grandi dimensioni che utilizza Monotone, CMake, Visual Studio Express 2008 e test personalizzati.Come si compila un progetto di Visual Studio dalla riga di comando?

Tutte le altre parti sembrano abbastanza semplici, ma non vedo come compilare la soluzione di Visual Studio senza ottenere la GUI.

Lo script è scritto in Python, ma una risposta che mi consenta di effettuare solo una chiamata a: os.system.

risposta

92

Conosco due modi per farlo.

Metodo 1
Il primo metodo (che io preferisco) è quello di utilizzare msbuild:

msbuild project.sln /Flags... 

Metodo 2
è anche possibile eseguire:

vcexpress project.sln /build /Flags... 

Il vcexpress l'opzione restituisce immediatamente e non stampa alcun output. Suppongo che potrebbe essere quello che vuoi per una sceneggiatura.

Si noti che DevEnv non è distribuito con Visual Studio Express 2008 (ho passato molto tempo a cercare di capirlo quando ho avuto per la prima volta un problema simile).

Quindi, il risultato finale potrebbe essere:

os.system("msbuild project.sln /p:Configuration=Debug") 

Si potrà anche fare in modo le variabili d'ambiente siano corrette, come msbuild e vcexpress non sono di default nel percorso di sistema. Avvia l'ambiente di sviluppo di Visual Studio ed esegui lo script da lì, oppure modifica i percorsi in Python (con os.putenv).

+0

Questo vale anche per Visual Studio 2010 Express. –

+0

msbuild non sembra essere in vendita con VS 2008 –

4

MSBuild is your friend.

msbuild "C:\path to solution\project.sln" 
+0

Ho visto che fallire in situazioni strane a causa delle differenze nel modo in cui MSBuild e DevEnv elaborano i file .sln. –

37

MSBuild di solito funziona, ma ho incontrato difficoltà prima. Potresti avere più fortuna con

devenv YourSolution.sln /Build 
+0

MSBuild non funziona con i progetti Visual Fortran (* .vfproc). Grazie per avermi indirizzato verso devenv, che fa. –

+0

Devo usare: devenv YourSolution.sln/Build ma ho lavorato alla grande grazie. – bobwah

+7

Puoi anche specificare la configurazione: 'devenv YourSolution.sln/Build Debug' –

15

A dire il vero devo aggiungere i miei 2 centesimi.

È possibile farlo con msbuild.exe. Esistono molte versioni di msbuild.exe.

C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft .NET \ Framework64 \ v4.0.30319 \ msbuild.exe
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ msbuild. exe C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe

Utilizzare la versione che vi serve. Fondamentalmente devi usare l'ultimo.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

Così come farlo.

  1. eseguire la finestra COMANDO

  2. ingresso il percorso MSBuild.exe

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild .exe

  1. immettere il percorso per la soluzione di progetto come

"C: \ Users \ Clark.Kent \ Documenti \ Visual Studio 2012 \ Projects \ WpfApplication1 \ WpfApplication1.sln"

  1. Aggiungi qualsiasi flag necessario dopo il percorso della soluzione.

  2. premere INVIO

Nota È possibile ottenere assistenza su tutte le possibili bandiere come

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe/aiutare

2

devenv funziona bene in molti casi, ma su una WIXPROJ per costruire la mia installazione WIX, tutto quello che ho è l'errore "catastrofico" nel registro Out.

Questo funziona: MSBUILD /Path/PROJECT.WIXPROJ/t: Costruire/p: Configurazione = Rilasciare

3

Utilizzando msbuild come sottolineato da altri, ha lavorato per me, ma avevo bisogno di fare un po 'più di questo . Prima di tutto, msbuild deve avere accesso al compilatore. Questo può essere fatto eseguendo:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" 

Poi msbuild non era nel mio $ PATH così ho dovuto eseguirlo attraverso il suo percorso esplicito:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln 

Infine, il mio progetto stava facendo uso di alcune variabili come $(VisualStudioDir). Sembra quelli non ottenere fissato dal msbuild così ho dovuto impostare manualmente tramite l'opzione /property:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln 

Quella linea poi finalmente mi ha permesso di compilare il mio progetto.

Bonus: sembra che gli strumenti della riga di comando non richiedano una registrazione dopo 30 giorni di utilizzo come l'edizione della community di Visual Studio basata su GUI "gratuita". Con il requisito di registrazione Microsoft in vigore, quella versione è difficilmente gratuita. Free-as-in-facebook semmai ...