Trouver la version de compilateur C++ de Microsoft à partir de la ligne de commande (pour les makefiles)
Je doit manquer quelque chose de vraiment évident, mais pour une raison quelconque, la version de ligne de commande du compilateur C++ de Microsoft (cl.exe) ne semble pas soutenir la production de rapports seulement sa version lors de l'exécution. Nous avons besoin de cette fonction pour écrire un makefile vérifier que le compilateur de la version utilisateur de notre outil a installé (ils se makefile avec code, qu'ils sont pour compiler eux-mêmes localement, donc nous n'avons aucun contrôle sur leur version de compilateur).
Dans gcc, vous venez de donner l'option-v ou --version pour obtenir une belle chaîne de version imprimée.
Dans cl.exe, vous obtenez un message d'erreur pour -v.
J'ai lu le MSDN docs et le compilateur d'aide en ligne, et je ne trouve pas l'interrupteur, il suffit d'imprimer la version de compilateur. Fâcheusement, vous obtenez toujours la version lorsque le compilateur commence... mais vous semblez ne pas être en mesure de commencer le compilateur juste pour obtenir la version en sortir.
Trouver fournisseur de compilateur /version à l'aide de qmake semblaient similaires, mais traite uniquement le cas simple de la gcc.
Je suis en train d'essayer cela avec VC++ Express 2005, si ce qui compte. J'ai espéré qu'il ne serait pas, comme la détection de la version de compilateur est mieux fait dans un compilateur indépendant de la version façon 🙂
Mise à jour, après les réponses:
- De course cl.exe sans arguments
imprime sa version et un peu d'aide
texte. - Cela ressemble le plus
portable de façon à obtenir à la version,
à travers vc versions. - Vous alors
analyser un multi-ligne de sortie, mais que
n'est pas trop difficile. - Nous l'avons fait dans
à la fin, et ça fonctionne.
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que vous ne pouvez pas exécuter cl.exe sans aucune entrée pour faire rapport à sa version?
J'ai juste testé en cours d'exécution cl.exe dans l'invite de commande pour VS 2008, 2005, et .NET 2003 et ils ont tous signalé sa version.
Pour 2008:
Pour 2005, SP 1 (ajouté Sûr Standard C++ classes):
Pour 2005:
Pour .NET 2003:
MODIFIER
Pour 2010, ce sera le long de la ligne de:
ou en fonction de la plateforme ciblée
Pour 2012:
où $$$ est de la plateforme ciblée (par exemple x86, x64, ARM), et XX, YYYYY, et ZZ sont mineures numéros de version.
Pour 2013:
où $$$ est de la plateforme ciblée (par exemple x86, x64, ARM), et XX, YYYYY, et ZZ sont mineures numéros de version.
Pour 2015:
où $$$ est de la plateforme ciblée (par exemple x86, x64, ARM), et XX et YYYYY sont mineures numéros de version.
cl
et vous aurez la version disponible pour être analysé, il suffit de prendre en compte que cela va changer avec le VS langue, par exemple pour VS 2010 en espagnol, vous obtiendrezCompilador de optimización de C/C++ de Microsoft (R) versión 16.00.30319.01 para x64
, je viens de trouver un projet important (jdk8.java.net) en s'appuyant en version anglaise pour l'obtention de la version par le biais de l'analyse et ce n'est pas juste, parce qu'il ne fonctionne pas dans mon espagnol version de Visual StudioJ'ai eu le même problème aujourd'hui. J'avais besoin de définir un indicateur dans un nmake Makefile si le compilateur cl version est de 15. Voici le hack je suis venu avec:
Noter que
cl /?
imprime les informations de version du flux d'erreur standard et le texte d'aide sur la sortie standard. Pour être en mesure de vérifier la version avec lefindstr
de commande, il faut d'abord rediriger stderr vers stdout à l'aide de2>&1
.L'idée ci-dessus peut être utilisé pour écrire un fichier de commandes Windows qui vérifie si le compilateur cl version est
<=
un nombre donné. Voici le code decl_version_LE.bat
:Maintenant, si vous voulez définir un indicateur dans votre nmake Makefile si la cl de la version
<=
15, vous pouvez utiliser:Juste l'exécuter sans options.
Créer un .c fichier contenant la ligne:
ou
puis pré-traiter avec
Il est facile d'analyser les données en sortie.
Ont un coup d'oeil à C++11 Caractéristiques (C++Moderne)
et à la section "Guide de Référence Rapide pour Visual C++ Version Numéros" ...
nmake
? "_MSC_VER
numéro de version" est très bien pour les fichiers source, mais il n'est pas clair comment il est utile pour les makefiles. "de la Marque le numéro de version" et "numéro de version Interne" semblent encore moins utile.Essayer:
En fait, toutes les fois que je donne cl un argument, il imprime le numéro de version sur la première ligne.
Vous pourriez juste le nourrir une poubelle argument et ensuite d'analyser la première ligne de la sortie, qui contient la verison nombre.