私は本当に明白なものを見逃しているに違いありませんが、何らかの理由で、Microsoft C++コンパイラ(cl.exe)のコマンドラインバージョンは、実行時のバージョンだけのレポートをサポートしていないようです。ツールのユーザーがインストールしたコンパイラーのバージョンをチェックするメイクファイルを作成するためにこれが必要です(ローカルでコンパイルするためのコードでメイクファイルを取得するため、コンパイラーのバージョンを制御できません)。
Gccでは、オプション-vまたは--versionを指定するだけで、ニースバージョン文字列が出力されます。
Cl.exeでは、-vのエラーが発生します。
MSDNのドキュメントとコンパイラのオンラインヘルプを読みましたが、コンパイラのバージョンを印刷するだけのスイッチは見つかりません。面倒なことに、コンパイラの起動時に常にバージョンを取得しますが、バージョンを取得するためだけにコンパイラを起動することはできないようです。
qmakeを使用したコンパイラベンダー/バージョンの検索 は類似しているように見えますが、gccの単純なケースのみを扱います。
それが重要な場合は、VC++ Express 2005でこれを試しています。コンパイラーのバージョンの検出は、コンパイラーのバージョンに依存しない方法で行うのが最適なので、そうしないことを望みました:)
返信後の更新:
バージョンを報告するための入力なしで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はマイナーバージョン番号です。
今日も同じ問題がありました。 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
次の行のみを含む.cファイルを作成します。
_MSC_VER
または
CompilerVersion=_MSC_VER
次に前処理
cl /nologo /EP <filename>.c
出力の解析は簡単です。
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... ]