2008-09-17 14 views
31

Visual Studio 2003 y 2005 (y tal vez 2008 por lo que sé) requieren que el usuario de la línea de comando se ejecute en 'Símbolo del sistema de Visual Studio'. Al iniciar este símbolo del sistema, establece varias variables de entorno que el compilador de C++, cl, usa al compilar.Usando 'cl' de Visual Studio desde una línea de comando normal

Esto no siempre es deseable. Si, por ejemplo, quiero ejecutar 'cl' desde Ant, me gustaría evitar tener que ejecutar Ant desde el 'Símbolo del sistema de Visual Studio'. La ejecución de vcvars32.bat no es una opción, ya que el entorno establecido por vcvars32.bat se perderá cuando se ejecute cl (si se ejecuta desde Ant).

¿Hay una forma fácil de ejecutar cl sin tener que ejecutar desde el símbolo del sistema de Visual Studio?

Respuesta

46

Los compiladores se pueden utilizar desde la línea de comandos (o archivos make) como cualquier otro compilador. Las principales cosas de las que debe ocuparse son las variables de entorno INCLUDE y LIB, y PATH. Si se está ejecutando desde cmd.exe, sólo puede ejecutar este .bat para establecer el entorno:

C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ vcvarsall.bat

si Tratando de usar los compiladores de un archivo MAKE, Cygwin, MinGW, o algo así, debe configurar las variables de entorno manualmente. Si se asume que el compilador está instalado en la ubicación predeterminada, esto debería funcionar para el Visual Studio 2008 compilador y el último Windows SDK:

Añadir a la RUTA:

  • C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.1 \ Bin
  • C: \ archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ Bin
  • C: \ archivos de programa \ Microsoft Visual Studio 9.0 \ Common7 \ IDE

Agregar para incluir:

  • C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.1 \ Include
  • C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ include
  • C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ incluyen

Añadir a LIB:

  • C: \ archivos de programa \ Microsoft SDKs \ Windows \ v6.1 \ Lib
  • C: \ Archivos de programa \ Microsoft Visual Studio 9.0 \ VC \ lib

Estos son los mínimos necesarios, pero deberían ser suficientes para cosas básicas. Estudie el script vcvarsall.bat para ver qué más puede desear establecer.

5

Simplemente puede ejecutar el archivo por lotes que configura las variables usted mismo. En VS08 se encuentra en: -

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

El archivo por lotes vcvarsall.bat que ejecuta el símbolo del sistema de Visual Studio simplemente trata de mantener las rutas y las variables de entorno del sistema limpias y agradables (y es importante si tiene varias versiones de Visual Studio).

Si está contento limitando su configuración a una versión y teniendo una ruta larga y un conjunto de variables de entorno, transfiera estas configuraciones (manualmente) a las variables de entorno del sistema (Mi PC | Propiedades --- o Win-Pause/Descanso).

¡Sin embargo, recomendaría no hacerlo!

2

Lo que hacen los archivos por lotes vcvars32 o vsvars32 no es ciencia de cohetes. Simplemente configuran PATH, INCLUDE, LIB y posiblemente las variables de entorno LIBPATH en valores predeterminados razonables para la versión del compilador en particular.

Todo lo que tiene que hacer es asegurarse de que esos elementos estén configurados correctamente para su Ant o makefile (antes de invocarlos o dentro de ellos).

Para INCLUDE y LIB/LIBPATH, una alternativa para establecer esos elementos en las variables de entorno es pasar esos ajustes a la línea de comando como parámetros explícitos.

20

crear su propio archivo por lotes (clenv.bat decir), y que en lugar de llamar a 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 ahora se puede invocar al igual que cl.exe, excepto que primero se carga el las variables de entorno necesarias primero.

+0

guau, nunca supe sobre% * - gracias :) – rein

1

El truco consiste en utilizar siempre el archivo batch correcto de vcvars. SI tiene instalada una sola versión de VisualStudio, no es un gran problema. Si está tratando con múltiples versiones como yo, se vuelve muy fácil ejecutar una compilación de MSVC++ 14 en una consola que se configuró con un archivo MSVC++ 15 vcvars. Puede que funcione o no, pero lo que sea que obtengas será diferente de lo que estarías creando desde VisualStudio.

Hemos tratado este problema en terp derivando el archivo vcvars apropiado del compilador elegido y siempre configurando el entorno internamente para la invocación de la herramienta. De esta manera, siempre tiene el archivo vcvars correcto para el compilador que está utilizando.

Solo para reiterar: Recomiendo encarecidamente que no intente duplicar manualmente lo que el archivo vcvars hace por usted. Es probable que te pierdas algo o lo entiendas lo suficiente como para que parezca que funciona mientras realizas algo ligeramente diferente de lo que querías.

0

Mi versión de abrir la línea de comandos de Visual Studio para Visual Studio Command Prompt en . Usado internamente para construir una biblioteca/proyecto y luego realizar algunos pasos adicionales con los archivos DLL resultantes.

Copie estas líneas en su archivo Compile and execute other steps.cmd, o similar.

@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 

En esta versión del guión, "Stay" en el modo de línea de comandos interactiva después. Comente al REM %comspec% /k para usar solo el script para fines no interactivos.

Cuestiones relacionadas