Usando ‘cl’ di Visual Studio da una normale riga di comando

Visual Studio 2003 e 2005 (e forse il 2008 per quanto ne so) richiedono che l’utente della riga di comando esegua “Prompt dei comandi di Visual Studio”. Quando si avvia questo prompt dei comandi, imposta varie variabili d’ambiente che il compilatore C ++, cl, usa durante la compilazione.

Questo non è sempre auspicabile. Se, ad esempio, voglio eseguire “cl” da Ant, vorrei evitare di dover eseguire Ant dal “Prompt dei comandi di Visual Studio”. L’esecuzione di vcvars32.bat non è un’opzione in quanto l’ambiente impostato da vcvars32.bat verrà perso dal momento in cui cl è stato eseguito (se eseguito da Ant).

C’è un modo semplice per eseguire cl senza dover eseguire dal prompt dei comandi di Visual Studio?

I compilatori possono essere utilizzati da riga di comando (o makefile) proprio come qualsiasi altro compilatore. Le cose principali di cui ci si deve preoccupare sono le variabili di ambiente INCLUDE e LIB e il PERCORSO. Se stai eseguendo da cmd.exe, puoi semplicemente eseguire questo .bat per impostare l’ambiente:

C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ vcvarsall.bat

Se stai cercando di utilizzare i compilatori da un makefile, Cygwin, MinGW o qualcosa del genere, devi impostare manualmente le variabili d’ambiente. Supponendo che il compilatore sia installato nel percorso predefinito, questo dovrebbe funzionare per il compilatore di Visual Studio 2008 e per l’ultimo SDK di Windows:

Aggiungi al PERCORSO:

  • C: \ Programmi \ Microsoft SDK \ Windows \ v6.1 \ Bin
  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ Bin
  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ Common7 \ IDE

Aggiungi a INCLUDE:

  • C: \ Programmi \ Microsoft SDK \ Windows \ v6.1 \ Include
  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ include
  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include

Aggiungi a LIB:

  • C: \ Programmi \ Microsoft SDK \ Windows \ v6.1 \ Lib
  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ lib

Questi sono il minimo indispensabile, ma dovrebbero essere sufficienti per le cose basilari. Studia lo script vcvarsall.bat per vedere che altro vuoi impostare.

Crea il tuo file batch (ad esempio clenv.bat) e chiamalo al posto di cl:

@echo off :: Load compilation environment call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" :: Invoke compiler with any options passed to this batch file "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" %* 

clenv.bat può ora essere invocato come cl.exe, tranne per il fatto che prima caricherà prima le variabili d’ambiente necessarie.

Puoi semplicemente eseguire il file batch che imposta le variabili da te. In VS08 si trova a: –

 C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat 

Quello che fanno i file batch vcvars32 o vsvars32 non è scienza missilistica. Semplicemente impostano le variabili d’ambiente PATH, INCLUDE, LIB e possibilmente le variabili d’ambiente LIBPATH a valori predefiniti sensibili per la particolare versione del compilatore.

Tutto quello che devi fare è assicurarti che queste cose siano impostate correttamente per il tuo Ant o makefile (prima di invocarle o al loro interno).

Per INCLUDE e LIB / LIBPATH un’alternativa all’impostazione di tali elementi nelle variabili di ambiente è quella di passare tali impostazioni alla riga di comando come parametri espliciti.

Il file batch vcvarsall.bat che viene eseguito dal prompt dei comandi di Visual Studio sta semplicemente cercando di mantenere le variabili e i percorsi dell’ambiente di sistema piacevoli e puliti (ed è importante se si dispone di più versioni di Visual Studio).

Se sei contento di limitare la configurazione a una versione e un lungo percorso e un insieme di variabili di ambiente, trasferisci queste impostazioni (manualmente) alle Variabili di ambiente di sistema (Risorse del computer | Proprietà — o Win-Pause / Break).

Consiglierei contro questo però!

Il trucco è usare sempre il file batch vcvars corretto. Se hai solo una versione di VisualStudio installata, non è un grosso problema. Se hai a che fare con più versioni come me, diventa molto facile eseguire una build MSVC ++ 14 in una console che è stata configurata con un file vcvars di MSVC ++ 15. Potrebbe o potrebbe non funzionare, ma qualunque cosa tu stia ottenendo sarà diversa da ciò che dovresti build da VisualStudio.

Abbiamo risolto questo problema in terp derivando il file vcvars corretto dal compilatore scelto e impostando sempre l’ambiente internamente al richiamo dello strumento. In questo modo, hai sempre il file vcvars giusto per il compilatore che stai utilizzando.

Giusto per ribadire: consiglio vivamente di provare a duplicare manualmente ciò che il file vcvars fa per te. Sei destinato a perdere qualcosa o a farlo al punto giusto che sembra che stia funzionando mentre in realtà sta facendo qualcosa di leggermente diverso da quello che volevi.

La mia versione di apertura della riga di comando di Visual Studio per Visual Studio Command Prompt in visual-studio-2010 . Utilizzato internamente per creare una libreria / progetto e quindi eseguire alcuni passaggi aggiuntivi con i file DLL risultanti.

Copia queste righe nella tua Compile and execute other steps.cmd file Compile and execute other steps.cmd o simili.

 @echo off REM Load Visual Studio's build tools call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 REM Choose what you want to do, 1 or 2 by (un)commenting REM 1. Add your cl.exe (or msbuild.exe or other) commands here REM msbuild.exe MyProject.csproj REM cl.exe REM custom-step.exe %* REM pause REM 2. Open a normal interactive system command shell with all variables loaded %comspec% /k 

In questa versione dello script, “rimango” in modalità intertriggers da riga di comando in seguito. Commento a REM %comspec% /k per utilizzare lo script solo per scopi non interattivi.