Merge topic 'vs-version-var'

5ce0f03cce VS: Add a variable to report the Visual Studio version build number
55529c5e93 Help: Factor out VS Build Number components document fragment

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8000
This commit is contained in:
Brad King
2022-12-08 13:03:04 +00:00
committed by Kitware Robot
9 changed files with 57 additions and 17 deletions

View File

@@ -131,6 +131,7 @@ Variables that Provide Information
/variable/CMAKE_VS_TARGET_FRAMEWORK_IDENTIFIER
/variable/CMAKE_VS_TARGET_FRAMEWORK_TARGETS_VERSION
/variable/CMAKE_VS_TARGET_FRAMEWORK_VERSION
/variable/CMAKE_VS_VERSION_BUILD_NUMBER
/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION
/variable/CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM
/variable/CMAKE_XCODE_BUILD_SYSTEM

View File

@@ -0,0 +1,6 @@
vs-version-var
--------------
* A :variable:`CMAKE_VS_VERSION_BUILD_NUMBER` variable is now set by
:ref:`Visual Studio Generators` for VS 2017 and above to report the
four-component Visual Studio version number.

View File

@@ -43,24 +43,8 @@ Supported pairs are:
.. versionadded:: 3.23
Specify the 4-component VS Build Version, a.k.a. Build Number.
The components are:
``<major>.<minor>``
The VS major and minor version numbers.
These are the same as the release version numbers.
``<date>``
A build date in the format ``MMMDD``, where ``MMM`` is a month index
since an epoch used by Microsoft, and ``DD`` is a day in that month.
``<build>``
A build index on the day represented by ``<date>``.
The build number is reported by ``vswhere`` as ``installationVersion``.
For example, VS 16.11.10 has build number ``16.11.32126.315``.
.. include:: CMAKE_VS_VERSION_BUILD_NUMBER_COMPONENTS.txt
.. versionadded:: 3.23
@@ -75,3 +59,6 @@ to hold the value persistently. If an environment variable of the form
is set and points to the ``Common7/Tools`` directory within one of the
VS instances, that instance will be used. Otherwise, if more than one
VS instance is installed we do not define which one is chosen by default.
The VS version build number of the selected VS instance is provided in
the :variable:`CMAKE_VS_VERSION_BUILD_NUMBER` variable.

View File

@@ -0,0 +1,14 @@
CMAKE_VS_VERSION_BUILD_NUMBER
-----------------------------
.. versionadded:: 3.26
Visual Studio version.
:ref:`Visual Studio Generators` for VS 2017 and above set this
variable to the Visual Studio version build number in the format
``<major>.<minor>.<date>.<build>``.
.. include:: CMAKE_VS_VERSION_BUILD_NUMBER_COMPONENTS.txt
See also the :variable:`CMAKE_GENERATOR_INSTANCE` variable.

View File

@@ -0,0 +1,18 @@
The components are:
``<major>.<minor>``
The VS major and minor version numbers.
These are the same as the release version numbers.
``<date>``
A build date in the format ``MMMDD``, where ``MMM`` is a month index
since an epoch used by Microsoft, and ``DD`` is a day in that month.
``<build>``
A build index on the day represented by ``<date>``.
The build number is reported by ``vswhere`` as ``installationVersion``.
For example, VS 16.11.10 has build number ``16.11.32126.315``.

View File

@@ -521,6 +521,7 @@ bool cmGlobalVisualStudioVersionedGenerator::SetGeneratorInstance(
{
if (this->LastGeneratorInstanceString &&
i == *(this->LastGeneratorInstanceString)) {
this->SetVSVersionVar(mf);
return true;
}
@@ -592,6 +593,8 @@ bool cmGlobalVisualStudioVersionedGenerator::SetGeneratorInstance(
cmStateEnums::INTERNAL);
}
this->SetVSVersionVar(mf);
// The selected instance may have a different MSBuild than previously found.
this->MSBuildCommandInitialized = false;
@@ -672,6 +675,13 @@ bool cmGlobalVisualStudioVersionedGenerator::ParseGeneratorInstance(
return true;
}
void cmGlobalVisualStudioVersionedGenerator::SetVSVersionVar(cmMakefile* mf)
{
if (cm::optional<std::string> vsVer = this->GetVSInstanceVersion()) {
mf->AddDefinition("CMAKE_VS_VERSION_BUILD_NUMBER", *vsVer);
}
}
bool cmGlobalVisualStudioVersionedGenerator::ProcessGeneratorInstanceField(
std::string const& key, std::string const& value)
{

View File

@@ -93,6 +93,7 @@ private:
mutable cmVSSetupAPIHelper vsSetupAPIHelper;
bool ParseGeneratorInstance(std::string const& is, cmMakefile* mf);
void SetVSVersionVar(cmMakefile* mf);
std::string GeneratorInstance;
std::string GeneratorInstanceVersion;

View File

@@ -0,0 +1 @@
-- CMAKE_VS_VERSION_BUILD_NUMBER='[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'

View File

@@ -12,3 +12,5 @@ elseif(NOT IS_DIRECTORY "${CMAKE_GENERATOR_INSTANCE}")
"which is not an existing directory.")
endif()
file(WRITE "${CMAKE_BINARY_DIR}/instance.txt" "${CMAKE_GENERATOR_INSTANCE}")
message(STATUS "CMAKE_VS_VERSION_BUILD_NUMBER='${CMAKE_VS_VERSION_BUILD_NUMBER}'")