web-dev-qa-db-ja.com

コマンドラインからMicrosoft C ++コンパイラのバージョンを見つける(メイクファイル用)

私は本当に明白なものを見逃しているに違いありませんが、何らかの理由で、Microsoft C++コンパイラ(cl.exe)のコマンドラインバージョンは、実行時のバージョンだけのレポートをサポートしていないようです。ツールのユーザーがインストールしたコンパイラーのバージョンをチェックするメイクファイルを作成するためにこれが必要です(ローカルでコンパイルするためのコードでメイクファイルを取得するため、コンパイラーのバージョンを制御できません)。

Gccでは、オプション-vまたは--versionを指定するだけで、ニースバージョン文字列が出力されます。

Cl.exeでは、-vのエラーが発生します。

MSDNのドキュメントとコンパイラのオンラインヘルプを読みましたが、コンパイラのバージョンを印刷するだけのスイッチは見つかりません。面倒なことに、コンパイラの起動時に常にバージョンを取得しますが、バージョンを取得するためだけにコンパイラを起動することはできないようです。

qmakeを使用したコンパイラベンダー/バージョンの検索 は類似しているように見えますが、gccの単純なケースのみを扱います。

それが重要な場合は、VC++ Express 2005でこれを試しています。コンパイラーのバージョンの検出は、コンパイラーのバージョンに依存しない方法で行うのが最適なので、そうしないことを望みました:)

返信後の更新:

  • 引数なしでcl.exeを実行すると、そのバージョンといくつかのヘルプテキストが出力されます。
  • これは、VCバージョン間でバージョンを取得する最もポータブルな方法のように見えます。
  • その後、複数行の出力を解析する必要がありますが、それはそれほど難しくありません。
  • 最後にこれを行いましたが、うまくいきます。
48
jakobengblom2

バージョンを報告するための入力なしでcl.exeを実行することはできないのですか?

VS 2008、2005、および.NET 2003のコマンドプロンプトでcl.exeの実行をテストしたところ、すべてバージョンが報告されました。

2008年の場合:

d:\ Program Files\Microsoft Visual Studio 9.0\VC> cl

Microsoft(R)32ビットC/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86

2005の場合、SP 1(Safe Standard C++クラスを追加):

C:\ Program Files\Microsoft Visual Studio 8\VC> cl

Microsoft(R)32ビットC/C++ Optimizing Compilerバージョン14.00.50727.762 for 80x86

2005年の場合:

C:\ Program Files\Microsoft Visual Studio 8\VC> cl

Microsoft(R)32ビットC/C++ Optimizing Compilerバージョン14.00.50727.42 for 80x86

.NET 2003の場合:

Microsoft(R)32ビットC/C++ Optimizing Compilerバージョン13.10.6030 for 80x86

[〜#〜] edit [〜#〜]

2010年には、次のような方針になります。

Microsoft(R)32ビットC/C++ Optimizing Compiler Version 16.XX.YYYYY.ZZ for 80x86

またはターゲットプラットフォームに応じて

Microsoft(R)C/C++ Optimizing Compiler Version 16.XX.YYYYY.ZZ for x64

2012年の場合:

Microsoft(R)C/C++ Optimizing Compilerバージョン17.XX.YYYYY.ZZ for $$$

ここで、$$$はターゲットプラットフォーム(x86、x64、ARMなど)であり、XX、YYYYY、およびZZはマイナーバージョン番号です。

2013年の場合:

Microsoft(R)C/C++ Optimizing Compilerバージョン18.XX.YYYYY.ZZ for $$$

ここで、$$$はターゲットプラットフォーム(x86、x64、ARMなど)であり、XX、YYYYY、およびZZはマイナーバージョン番号です。

2015年の場合:

Microsoft(R)C/C++ Optimizing Compilerバージョン19.XX.YYYYY for $$$

ここで、$$$はターゲットプラットフォーム(x86、x64、ARMなど)であり、XXおよびYYYYYはマイナーバージョン番号です。

37
KTC

今日も同じ問題がありました。 clコンパイラーのバージョンが15の場合、nmake Makefileにフラグを設定する必要がありました。ここに、私が思いついたハックを示します。

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

cl /?は、バージョン情報を標準エラーストリームに出力し、ヘルプテキストを標準出力に出力することに注意してください。 findstrコマンドでバージョンを確認するには、最初に2>&1を使用してstderrをstdoutにリダイレクトする必要があります。

上記の考え方を使用して、clコンパイラのバージョンが<=であるかどうかを確認するWindowsバッチファイルを作成できます。 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

Clバージョン<= 15の場合、nmake Makefileにフラグを設定する場合は、次を使用できます。

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

次の行のみを含む.cファイルを作成します。

_MSC_VER

または

CompilerVersion=_MSC_VER

次に前処理

cl /nologo /EP <filename>.c

出力の解析は簡単です。

2
Rexo

C++ 11 Features(Modern C++) をご覧ください

セクション「Visual C++バージョン番号のクイックリファレンスガイド」...

オプションなしで実行するだけです。

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... ]
1
Mark