web-dev-qa-db-fra.com

Utilisation de «cl» de Visual Studio à partir d'une ligne de commande normale

Visual Studio 2003 et 2005 (et peut-être 2008 pour tout ce que je sais) nécessitent que l'utilisateur de la ligne de commande s'exécute dans l '"invite de commandes Visual Studio". Au démarrage de cette invite de commande, il définit diverses variables d'environnement que le compilateur C++, cl, utilise lors de la compilation.

Ce n'est pas toujours souhaitable. Si, par exemple, je veux exécuter "cl" depuis Ant, je voudrais éviter d'avoir à exécuter Ant depuis "Visual Studio Command Prompt". L'exécution de vcvars32.bat n'est pas une option car l'environnement défini par vcvars32.bat serait perdu au moment où cl a été exécuté (s'il s'exécute depuis Ant).

Existe-t-il un moyen facile d'exécuter cl sans avoir à exécuter à partir de l'invite de commandes Visual Studio?

38
Tom Hennen

Les compilateurs peuvent être utilisés à partir de la ligne de commande (ou makefiles) comme tout autre compilateur. Les principales choses dont vous devez vous occuper sont les variables d'environnement INCLUDE et LIB et PATH. Si vous exécutez à partir de cmd.exe, vous pouvez simplement exécuter ce fichier .bat pour définir l'environnement:

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

Si vous essayez d'utiliser les compilateurs à partir d'un makefile, Cygwin, MinGW, ou quelque chose comme ça, vous devez définir les variables d'environnement manuellement. En supposant que le compilateur est installé à l'emplacement par défaut, cela devrait fonctionner pour le compilateur Visual Studio 2008 et le dernier SDK Windows:

Ajouter au CHEMIN:

  • C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin
  • C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

Ajouter à INCLURE:

  • C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\include
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include

Ajouter à LIB:

  • C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib
  • C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

Ce sont le strict minimum, mais devraient suffire pour les choses de base. Étudiez le script vcvarsall.bat pour voir ce que vous voudrez peut-être définir de plus.

54
Ville Laurikari

Créez votre propre fichier batch (par exemple clenv.bat), et appelez cela au lieu de 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 peut désormais être appelé comme cl.exe, sauf qu'il chargera d'abord les variables d'environnement nécessaires.

22
Eclipse

Vous pouvez simplement exécuter le fichier batch qui définit les variables vous-même. Dans VS08, il est situé à: -

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

Ce que font les fichiers batch vcvars32 ou vsvars32 n'est pas sorcier. Ils définissent simplement les variables d'environnement PATH, INCLUDE, LIB et éventuellement LIBPATH sur des valeurs par défaut sensibles pour la version particulière du compilateur.

Tout ce que vous avez à faire est de vous assurer que ces éléments sont correctement définis pour votre fourmi ou votre makefile (avant de les invoquer ou en leur sein).

Pour INCLUDE et LIB/LIBPATH, une alternative à la définition de ces éléments dans les variables d'environnement consiste à transmettre ces paramètres à la ligne de commande en tant que paramètres explicites.

2
Michael Burr

Le fichier de commandes vcvarsall.bat qui est exécuté par l'invite de commande de Visual Studio essaie simplement de garder vos variables et chemins d'environnement système agréables et propres (et est important si vous avez plusieurs versions de Visual Studio).

Si vous êtes satisfait de limiter votre configuration à une seule version et d'avoir un long chemin et un ensemble de variables d'environnement, transférez ces paramètres (manuellement) vers les variables d'environnement système (Poste de travail | Propriétés --- ou Win-Pause/Break).

Je le déconseille cependant!

1
Ray Hayes

L'astuce consiste à toujours utiliser le fichier de commandes vcvars correct. SI vous n'avez qu'une seule version de VisualStudio installée, ce n'est pas un gros problème. Si vous avez affaire à plusieurs versions comme moi, il devient très facile d'exécuter une build MSVC++ 14 dans une console qui a été configurée avec un fichier vcvars MSVC++ 15. Cela peut ou non fonctionner, mais tout ce que vous obtenez sera différent de ce que vous construirez à partir de VisualStudio.

Nous avons traité ce problème dans terp en dérivant le fichier vcvars approprié du compilateur choisi et en configurant toujours l'environnement en interne à l'invocation de l'outil. De cette façon, vous avez toujours le bon fichier vcvars pour le compilateur que vous utilisez.

Juste pour réitérer: je déconseille fortement d'essayer de dupliquer manuellement ce que le fichier vcvars fait pour vous. Vous êtes obligé de manquer quelque chose ou de le faire juste assez pour qu'il semble que cela fonctionne tout en faisant quelque chose de légèrement différent de ce que vous vouliez.

1
alex

Ma version de l'ouverture de la ligne de commande de Visual Studio pour l'invite de commande de Visual Studio dans visual-studio-201 . Utilisé en interne pour créer une bibliothèque/un projet, puis effectuer des étapes supplémentaires avec les fichiers DLL DLL.

Copiez ces lignes dans votre Compile and execute other steps.cmd fichier, ou similaire.

@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

Dans cette version du script, je "reste" ensuite en mode ligne de commande interactive. Commentaire à REM %comspec% /k pour n'utiliser le script qu'à des fins non interactives.

0
Joel Purra