15

MSVC2012およびv100プラットフォームツールセット(MSVC2010から)を使用してプロジェクトをビルドする必要があります。残念ながら、コード全体でC++11機能の「範囲ベース」を使用しています。コンパイル時に現在のプラットフォームツールセットを知ることができるプリプロセッサディレクティブがあるかどうか疑問に思います。つまり

#if (_MSC_PLATFORM_TOOLSET > 100)
#   define ALLOW_RANGE_BASED_FOR 1
#else
#   define ALLOW_RANGE_BASED_FOR 0
#endif

_MSC_VERマクロを使用してみましたが、両方のプラットフォームツールセットで1700に設定されています(MSVC2012をまだ使用しているため、これは理にかなっています)。何か提案をいただければ幸いです。ありがとうございました。

4

4 に答える 4

19

同じ問題が発生し、独自のプリプロセッサ定義を追加しました_MSC_PLATFORM_TOOLSET
のプロジェクトプロパティで

  • C / C ++
  • プリプロセッサ
  • プリプロセッサの定義

_MSC_PLATFORM_TOOLSET = $(PlatformToolsetVersion)を追加して、Visual Studioに現在のツールセットのバージョンをプリプロセッサーに統合させ、クエリを実行できるようにします。

#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif

最終的に動作します。

于 2013-02-13T09:14:47.270 に答える
10

マクロ_MSC_FULL_VERはプラットフォームツールセットごとに異なります。およびVisualStudioのバージョン。(現在の)Visual Studio 2013プレビューの場合は、です180020617。2012年11月のコンパイラCTP(C ++ 11を提供)を備えたVisual Studio 2012の場合、それはでした170060315。同様_MSC_VERに、最初の4桁はVisualStudioの各バージョンで同じです。Visual Studio 2012の場合、常に1700です。次に例を示します。

#ifdef _MSC_FULL_VER
  #if   _MSC_FULL_VER == 170060315
  // MSVS 2012; Platform Toolset v110
  #elif _MSC_FULL_VER == 170051025
  // MSVS 2012; Platform Toolset v120_CTP_Nov2012
  #elif _MSC_FULL_VER == 180020617
  // MSVS 2013; Platform Toolset v120
  #endif
#endif // _MSC_FULL_VER
于 2013-07-29T19:23:59.043 に答える
6

VisualStudioでCまたはC++を開発するときに、実際に知っておく必要のあるバージョン番号は2つあります。これらは、Visual Studioのメジャーバージョン番号、および「cl」コンパイラのメジャー/マイナーバージョンです。

VisualStudioのバージョン番号が[バージョン情報]ダイアログに表示されます。たとえば、VS2012の場合、「バージョン11.0.60610.01」が表示されるため、メジャーバージョン番号は「11」です。

bakefileCMakeなどのビルドツールは、 VisualStudioのメジャーバージョンを対象としたソリューションファイルを作成します。

コンパイラの「メジャー/マイナー」バージョンは、_MSC_VERマクロの値です。これを表示する小さなプログラムは次のとおりです。

#include <stdio.h>
/*
 * Compile and run this on a Visual Studio platform to get
 * the version identifier.
 */
#define PRINT_INT_MACRO(m) (printf("%s: \"%d\"\n", #m, m))

int
main() {
    PRINT_INT_MACRO(_MSC_VER);
      return 0;
}

コメントが言うように、あなたは実際にあなたがテストしたいコンパイラでそれをコンパイルしなければなりません。手間を省くために、ここに小さな表があります。

名前バージョン_MSC_VER
VS 6 6.0 1200
VS 2002 7.0 1300
VS 2003 7.1 1310
VS 2005 8.0 1400
VS 2008 9.0 1500
VS 2010 10.0 1600
VS 2012 11.0 1700
VS 2013 12.0 1800
VS 2015 13.0 1900

お役に立てれば!

于 2015-11-08T04:53:45.327 に答える
2

VS2015で修正されたかどうかはわかりませんが、期待どおりに機能します。

次の小さなプログラムを作成しました。

#include <iostream>
using namespace std;

int main()
{
    cout << "_MSC_VER: " << _MSC_VER << endl;
    cout << "_MSC_FULL_VER: " << _MSC_FULL_VER << endl;
    cout << "_MSC_BUILD: " << _MSC_BUILD << endl;

    (void) getchar();

    return 0;
}

VS2010からVS2015までの各プラットフォームバージョンのビルド構成を追加しました。_MSC_VERは、VS2015プロジェクトのVisual Studio 2015で常にビルドしているにもかかわらず、上記のPLATFORMバージョンに対応していました。

乾杯、

イアン

于 2016-09-06T13:51:58.337 に答える