[解決済み] Visual Studio 2017、Boost、CMakeのバージョン番号について
質問内容
Boostメーリングリストより リスト VS2017 には、おそらく私たちが最も興味を持つであろう以下のバージョン番号があると理解しています。
Visual Studio 15.0
cl; C/C++ Compiler 19.10
Platform Toolset: v141
Visual Studio 2017 IDEでは、以下のマクロが定義されています。
CrtSDKReferenceVersion 14.0
MSBuildToolsVersion 15.0
PlatformToolsetVersion 141
VCToolsVersion 14.10.25017
VisualStudioVersion 15.0
コンパイル時に、以下の変数が
#define
'd:
_MSC_VER 1910
_MSC_FULL_VER 191025017
cl.exe
はMSVCフォルダに含まれる
をVCツールのバージョンで表示します。完全な
x64
フォルダのパスは
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64
cl /Bv
をコマンドラインから実行します。
Compiler Passes:
cl.exe: Version 19.10.25017.0
c1.dll: Version 19.10.25017.0
c1xx.dll: Version 19.10.25017.0
c2.dll: Version 19.10.25017.0
link.exe: Version 14.10.25017.0
mspdb140.dll: Version 14.10.25017.0
1033\clui.dll: Version 19.10.25017.0
お知らせ
mspdb140.dll
と
link.exe
はバージョン14.10.25017.0と記載されています。
そして
こちら
ということらしいです。
msvc : 14.1
は、boostのツールセットとして使用する必要があります。そして
もう一つの回答はこちらです。
boostのコンパイラの命名について述べているコメントがあります。
コンパイルすると、v141のライブラリ名が表示されるのですが。
boost_atomic-vc141-mt-1_64.lib
しかし、CMakeでは
_Boost_GUESS_COMPILER_PREFIX
関数には以下のようなものがあります。
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10)
set(_boost_COMPILER "-vc150")
elseif (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
set(_boost_COMPILER "-vc140")
では、どのバージョンを使えばいいのでしょうか?
vc141
または
vc150
? は?
-
v141
インプリvc141
それとも -
v141
暗示するvc150
?
解決方法は?
この質問に答えるには、次のことから始めるのが最善でしょう。
- マイクロソフトの製品構成
- マイクロソフトの製品の呼び方と
- マイクロソフトの番号の付け方。
それで、私のシステム上では
Microsoft Visual Studio Community 2017 has version number 15.0.26228.4. It contains:
|
+--Visual C++, informally VS, informally MSVC
(no version number to be found, but it is reasonable to infer 15.0)
which uses tools, such as
|
+--Toolset v141, composed of
|
+--compiler cl.exe version 19.10.25017.0 and
+--linker link.exe version 14.10.25017.0 which
|
+--refers to CrtSDK version 14.0, and
+--uses mspdb140.dll version 14.10.25017.0
ツールセットのバージョンをメインに参照すべきなのは明らかだと思われます。特に、VS 2017 が
v140
と
v141
. ツールセットでは、コンパイラとリンカの両方がきちんと定義されています。
では、Boostをコンパイルする際に
b2 toolset=msvc-14.0
を例に挙げてください。私の主張では、それはツールセット
v140
Microsoft Visual C++ ではありません。
14.0
.
ツールセットでどのようにコンパイルするのでしょうか
v141
? 非公式に msvc は通常 VS 番号です (例.
15.0
の場合、私のシステムではVS2017)、しかし、それはツールセットを指定するときに不正確であろう。次に、Boostが以下の内容を含む名前のファイルを作成することに注目します。
vcXXX
ここで
vc
のようなVisual C++のバージョン番号の非公式な概念を暗示しているように思われます。
15.0
しかし、指定されているのはツールセットであるため、それを参照することはできません。
つまり、VS2017で最新のツールセット用にコンパイルする場合、コマンドは次のようになります。
b2 toolset=msvc-14.1
を含むファイル名のライブラリが生成されます。
vc141
. となっていれば、混乱は少なかったでしょう。
v141
しかし、そうすれば、私たちがマイクロソフトのツールセットを扱っていることを思い出すこともないでしょう。
今は、次のようにコマンドを考えています。
b2 toolset=msvc-14.1
---- ----
| |
| +-- Toolset v141
|
+------- Microsoft Visual C++ (version 15.0)
最後に、CMake の関数を
FindBoost.cmake
. その
_boost_COMPILER
をデフォルトにする必要があります。
-vc141
の場合、コンパイラのバージョンは
19.10
.
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++の余分な資格エラー
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較