gpt4 book ai didi

c++ - Visual Studio 2017、Boost 和 CMake 的版本号

转载 作者:IT老高 更新时间:2023-10-28 12:54:10 30 4
gpt4 key购买 nike

From the Boost mailing列表 我了解 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 is contained within an MSVC folder与 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.dlllink.exe 列出的版本为 14.10.25017.0。


还有 here似乎 msvc : 14.1 应该用作 boost 的工具集。和here is another answer其中一些评论谈到了 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 如何构建其产品
  • 微软对其产品的称呼和
  • Microsoft 如何对它们进行编号。

所以,在我的系统上:

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 可以同时使用 v140v141 构建。该工具集巧妙地定义了编译器和链接器。


那么,例如,用 b2 toolset=msvc-14.0 编译 Boost 意味着什么?我的论点是它意味着工具集 v140,而不是 Microsoft Visual C++ 14.0

如何使用工具集 v141 进行编译?非正式地,msvc 通常是 VS 编号(例如,我系统上的 VS2017 的 15.0),但在指定工具集时会不准确。接下来,我们注意到 Boost 将创建一个名称包含 vcXXX 的文件,其中 vc 似乎再次暗示 Visual C++ 版本号的非正式概念,例如 15.0 但肯定不能引用它,因为它是指定的工具集。

因此,为 VS2017 上的最新工具集编译该命令将是 b2 toolset=msvc-14.1,它将生成文件名包含 vc141 的库。如果它是 v141 就不会那么困惑了,但是这样就不会提醒我们正在处理 Microsoft 工具集。

我现在想到的命令如下:

b2 toolset=msvc-14.1
---- ----
| |
| +-- Toolset v141
|
+------- Microsoft Visual C++ (version 15.0)

最后我们可以考虑FindBoost.cmake中的CMake函数。如果编译器版本为 19.10,则 _boost_COMPILER 应默认为 -vc141

关于c++ - Visual Studio 2017、Boost 和 CMake 的版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730478/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com