Numéros de Version pour Visual Studio 2017, Boost et CMake

Depuis le coup de pouce de diffusion liste je comprends que VS2017 a la suite des numéros de version que nous serions probablement plus intéressés par:

Visual Studio           15.0
cl; C/C++ Compiler      19.10
Platform Toolset:       v141

les macros suivantes sont définies dans L'IDE Visual Studio 2017:

CrtSDKReferenceVersion  14.0
MSBuildToolsVersion     15.0
PlatformToolsetVersion  141
VCToolsVersion          14.10.25017
VisualStudioVersion     15.0

pendant la compilation les variables suivantes sont #define 'd:

_MSC_VER                1910
_MSC_FULL_VER           191025017

cl.exeest contenu dans un dossier MSVC avec la version VC tools. L'complet x64 le chemin du dossier est

C:Program Files (x86)Microsoft Visual Studio17CommunityVCToolsMSVC.10.25017binHostX64x64

cl /Bv à partir de la ligne de commande listes:

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
 1033clui.dll: Version 19.10.25017.0

Avis mspdb140.dll et link.exe sont listés avec la version 14.10.25017.0.


Et ici il semble que msvc : 14.1 doit être utilisé comme ensemble d'outils pour boost. Et voici une autre réponse où certains commentaires parlent du nom du compilateur de boost.

quand je compilerai j'obtiens les noms de bibliothèques avec v141 par exemple: boost_atomic-vc141-mt-1_64.lib


mais en CMake le _Boost_GUESS_COMPILER_PREFIX la fonction est la suivante:

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")

alors quelle version devrait être utilisée? vc141 ou vc150? Fait

  • v141 impliquent vc141, ou n'
  • v141 impliquent vc150?
24
demandé sur Community 2017-03-11 04:59:29

2 réponses

pour répondre à cela, il serait préférable de commencer avec

  • comment Microsoft structure ses produits
  • ce que Microsoft appelle ses produits et
  • comment Microsoft les numérote.

alors, sur mon système:

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

Il semble clair que les outils de la version devrait être la principale référence. Surtout si L'on considère que VS 2017 peut construire à la fois avec v140 et v141. L'ensemble d'outils définit clairement à la fois compilateur et l'éditeur de liens.


alors, que signifie compiler Boost avec b2 toolset=msvc-14.0 par exemple? Ma thèse est que cela signifie d'outils v140, pas de Microsoft Visual C++ 14.0.

comment compiler avec toolset v141? De façon informelle, msvc est habituellement le nombre de VS (par exemple 15.0 pour VS2017 sur mon système), mais ce serait inexact en spécifiant un ensemble d'outils. Ensuite, nous remarquons que Boost va créer un fichier avec un nom contenant vcXXXvc semble impliquer à nouveau la notion informelle D'un numéro de version visuel c++ tel que 15.0 mais ne peut certainement pas se référer à ce que c'est l'ensemble d'outils qui est spécifié.

donc, compiler pour la dernière série d'outils sur VS2017 la commande serait b2 toolset=msvc-14.1 qui va générer des bibliothèques avec des noms de fichiers contenant vc141. Cela aurait été moins déroutant si cela avait été v141, mais alors il n'y aurait eu aucun rappel que nous traitons avec le Microsoft jeu d'outils.

maintenant je pense de la commande comme suit:

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

enfin nous pouvons considérer la fonction CMake dans FindBoost.cmake. _boost_COMPILER par défaut -vc141 si la version du compilateur est 19.10.

20
répondu wally 2017-03-11 17:47:08

versions CMake qui sont moins que la version officielle v3.8.0, qui comprend les numéros rc ont les suivants dans leur FindBoost.cmake.

if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10)
  set(_boost_COMPILER "-vc150")

ce qui signifie que, si vos DLLs Boost ne sont pas nommés comme par exemple boost_date_time- vc150 - mt-1_55.dll qu'ils ne seront pas trouvés. Version v3.8.0 a commencé à correspondre à L'approche adoptée par Boost en ce qui concerne les numéros de version, bien que je ne me souvienne pas de la discussion approfondie de la question. La réponse courte est cependant, si vous utilisent une version V3 de cmake.8.0 ou plus, vous avez besoin de ce qui suit à la place.

  if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 19.10)
    set(BOOST_TOOLSET msvc-14.1)

pour la simplicité, dans mes constructions Boost pour Windows, j'ajoute toujours le code CMake suivant..

if(MSVC AND (NOT MSVC_VERSION LESS 1910))
  # Get the CMAKE version string and make sure it's not a release candidate and >= 3.8.0
  if( (CMAKE_VERSION MATCHES "^3\.8\.0-rc") OR (CMAKE_VERSION VERSION_LESS 3.8.0))
    message(FATAL_ERROR "CMake 3.8.0 is the minimum version required to use Boost with Visual Studio 2017 or greater")
  endif()
endif()

cela me laisse oublier toute la question de ce que les bibliothèques devraient être nommées.

3
répondu StAlphonzo 2017-06-05 11:13:34