Boost logo

Boost :

Subject: Re: [boost] [build] VC++ 2017 version number?
From: Tom Kent (lists_at_[hidden])
Date: 2017-03-13 21:09:16


On Mon, Mar 13, 2017 at 2:34 PM, Beman Dawes via Boost <
boost_at_[hidden]> wrote:

> Boost.build in develop is treating VC++2017 RTW (aka RTM) as msvc-14.1.
>
> Yet the Visual Studio 2017 RTW Help "About Microsoft Visual Studio" shows
> the version as "15.0.0-RTW+26228.4"
>
> Shouldn't boost.build follow Microsoft's numbering? Seems like calling 2017
> RTW anything except 15.0 is a recipe for confusion.
>

First, the toolset number that has been chosen is 14.10, not 14.1. Thus,
you need to enter `b2 toolset=msvc-14.10` to build.

I agree with Beman that not calling it 15.0 when microsoft is so clearly
calling the release Visual Studio "15" is going to cause confusion.
Additionally, when you have multiple projects (and multiple versions of the
boost library), you want to use a visual studio environment variable to
select the correct libraries. In our internal projects (and the visual
studio binaries that we publish on sourceforge) we package the libraries in
directories like "lib64-msvc-14.0", this can be accessed with the visual
studio variable string
`lib$(PlatformArchitecture)-msvc-$(VisualStudioVersion)`.
In 2017 the VisualStudioVersion variable went to 15.0, and there is no
available variable that gives 14.10 (or 14.1).

On the other hand, the "toolset" that microsoft sets the compilers to is
"v141". (Open a solution, right click on project, properties ->
Configuration Properties -> General -> Platform Toolset -> Defaults to:
"Visual Studio 2017 (v141)". This variable is then used to setup the build
environment so that the correct compiler/linker, includes, libraries, etc
are used. The version of the compiler (cl.exe) is actually 19.10, whereas
the Visual Studio 2015 (msvc-14.0) was 19.00, it has typically been +5
compared to the vc/vs version. This was all done to signify some kind of
abi compatibility (I haven't investigated what the practical applications
of this are, or why one would care...does this mean we can link a build of
boost made with msvc-14.0 with c++ application code compiled with
msvc-14.10?).

One can only hope that the toolset that ships with Visual Studio 2019(ish),
visual studio 16.0 is v160.

In short, Microsoft really screwed up the version numbering of this release
(if you think this is bad, don't ask what you have to do to programatically
find the compiler on disk, it requires COM calls now!), and we don't have a
*good* option.

As I said before, for my opinion, I think we should move to msvc-15.0 for
the toolset, as that will be *less* confusion for the end-users.

However, either way we go, we need to document this a lot better than we do
now. It needs to be loud and clear in both the boost build documentation as
well as the boost getting started docs.

Tom


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk