programa para descargar compile compilar visual-c++ makefile

visual-c++ - para - g++ windows



Encontrar la versión del compilador de Microsoft C++ desde la línea de comandos(para makefiles) (5)

¿Estás seguro de que no puedes ejecutar cl.exe sin ninguna entrada para que informe su versión?

Acabo de probar ejecutando cl.exe en el símbolo del sistema para VS 2008, 2005 y .NET 2003 y todos informaron sobre su versión.

Para 2008:

d: / Archivos de programa / Microsoft Visual Studio 9.0 / VC> cl

Microsoft (R) Compilación optimizadora de C / C ++ de 32 bits Versión 15.00.30729.01 para 80x86

Para 2005, SP 1 (se agregaron las clases de Safe Standard C ++):

C: / Archivos de programa / Microsoft Visual Studio 8 / VC> cl

Microsoft (R) 32-bit C / C ++ Optimizing Compiler versión 14.00.50727.762 para 80x86

Para 2005:

C: / Archivos de programa / Microsoft Visual Studio 8 / VC> cl

Microsoft (R) 32-bit C / C ++ Optimizing Compiler versión 14.00.50727.42 para 80x86

Para .NET 2003:

Microsoft (R) 32-bit C / C ++ Optimizing Compiler versión 13.10.6030 para 80x86

EDITAR

Para 2010, estará en la línea de:

Microsoft (R) 32-bit C / C ++ Optimizing Compiler versión 16.XX.YYYYY.ZZ para 80x86

o dependiendo de la plataforma específica

Microsoft (R) C / C ++ Optimizing Compiler versión 16.XX.YYYYY.ZZ para x64

Para 2012:

Microsoft (R) C / C ++ Optimizing Compiler versión 17.XX.YYYYY.ZZ para $$$

donde $$$ es la plataforma de destino (por ejemplo, x86, x64, ARM), y XX, YYYYY y ZZ son números de versión menores.

Para 2013:

Microsoft (R) C / C ++ Optimizing Compiler versión 18.XX.YYYYY.ZZ para $$$

donde $$$ es la plataforma de destino (por ejemplo, x86, x64, ARM), y XX, YYYYY y ZZ son números de versión menores.

Para 2015:

Microsoft (R) C / C ++ Optimizing Compiler versión 19.XX.YYYYY para $$$

donde $$$ es la plataforma de destino (por ejemplo, x86, x64, ARM), y XX e YYYYY son números de versión menores.

Debo extrañar algo realmente obvio, pero por alguna razón, la versión de línea de comandos del compilador de Microsoft C ++ (cl.exe) no parece ser compatible con el informe solo su versión cuando se ejecuta. Necesitamos esto para escribir makefiles que comprueben la versión del compilador que un usuario de nuestra herramienta ha instalado (obtienen makefiles con código para compilarse localmente, por lo que no tenemos control sobre su versión del compilador).

En gcc, solo le da la opción -v o --version para imprimir una buena cadena de versión.

En cl.exe, obtiene un error para -v.

He leído los documentos de MSDN y la ayuda en línea del compilador, y no encuentro el interruptor para imprimir la versión del compilador. Curiosamente, siempre obtienes la versión cuando se inicia el compilador ... pero pareces no ser capaz de iniciar el compilador solo para obtener la versión.

Encontrar el proveedor del compilador / versión usando qmake parecía similar, pero solo trata el caso simple de gcc.

Estoy intentando esto con VC ++ Express 2005, si eso importa. Esperaba que no fuera así, ya que detectar la versión del compilador se hace mejor en una versión independiente del compilador :)

Actualización, después de las respuestas:

  • Al ejecutar cl.exe sin ningún argumento, se imprime su versión y texto de ayuda.
  • Esta parece la forma más portátil de obtener la versión en todas las versiones de vc.
  • Luego tiene que analizar una salida de varias líneas, pero eso no es demasiado difícil.
  • Hicimos esto al final, y funciona.

Eche un vistazo a las características de C ++ 11 (C ++ moderno)

y sección "Guía de referencia rápida para números de versión de Visual C ++" ...


Simplemente ejecútalo sin opciones.

P:/>cl.exe Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. usage: cl [ option... ] filename... [ /link linkoption... ]


Tratar:

cl /v

En realidad, cada vez que le doy un argumento, imprime el número de versión en la primera línea.

Simplemente podría alimentarlo con un argumento de basura y luego analizar la primera línea de la salida, que contiene el número de verison.


Tuve el mismo problema hoy. Necesitaba establecer una bandera en un makefile nmake si la versión del compilador cl es 15. Aquí está el truco que se me ocurrió:

!IF ([cl /? 2>&1 | findstr /C:"Version 15" > nul] == 0) FLAG = "cl version 15" !ENDIF

Tenga en cuenta que cl /? imprime la información de la versión en la secuencia de error estándar y el texto de ayuda en la salida estándar. Para poder verificar la versión con el comando findstr primero debe redirigir stderr a stdout usando 2>&1 .

La idea anterior se puede utilizar para escribir un archivo por lotes de Windows que verifica si la versión del compilador cl es <= un número dado. Aquí está el código de cl_version_LE.bat :

@echo off FOR /L %%G IN (10,1,%1) DO cl /? 2>&1 | findstr /C:"Version %%G" > nul && goto FOUND EXIT /B 0 :FOUND EXIT /B 1

Ahora, si desea establecer un indicador en su nmake Makefile si la versión cl es <= 15, puede usar:

!IF [cl_version_LE.bat 15] FLAG = "cl version <= 15" !ENDIF