VS: Fix GenerateDebugInformation values for v140 and v141 toolsets
When VS 2015 was first released, its new v140 toolset came with a
link.xml
file that changed the GenerateDebugInformation
boolean
(false
and true
) value from earlier toolsets to an enumeration
consisting of the possible values No
, Debug
, and DebugFastLink
.
We first adapted to this in commit f086c665, but that broke older toolsets that still expected the boolean. Then commit dc422d27 added a hack to fix up the value based on the toolset in use. Several follow-up commits fixed this for more older toolsets because our flag table was at the time based on the generator in use rather than the toolset in use.
Since !73 (merged) we use a flag table based on the toolset, so the fixup
hack should not be needed. We had to keep it around only due to our
default value for GenerateDebugInformation (false
or No
) still being
based on the generator instead of the toolset.
A VS 2015 update was released that changed the v140 toolset link.xml
file back to using false
and true
for the GenerateDebugInformation
enumeration variants previously known as No
and Debug
. In order to
know which pair to use, we need to parse the link.xml
file for the
current toolset.
Switch back to using false
and true
unconditionally in our
GenerateDebugInformation
flag table entries and default value. With
that plus the toolset-based flag table, we now get incorrect values for
GenerateDebugInformation
only when using a v140 toolset from an older
VS 2015 installation. Detect this case by parsing link.xml
and add
special logic to convert false
and true
to No
and Debug
to
satisfy the older toolset specification.
The original description of this MR follows.
Simplified example:
project(Sample NONE)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /LTCG /INCREMENTAL:NO")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}" CACHE STRING
"Release configuration linker flags")
enable_language(CXX C)
add_executable(Sample sample.cpp)
Open the resulting project in VS2015/VS2017 and look at Linker > Debugging > Generate Debug Info. It will be say "Debug" instead of "Generate Debug Information (/DEBUG)".
Topic-rename: vs-link-debug-flags