diff options
author | Brad King <brad.king@kitware.com> | 2024-10-09 13:32:21 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-10-09 13:32:21 (GMT) |
commit | 738cf491d42add506d153d25a9e2ef0c20d92311 (patch) | |
tree | 171c527189d6d58c3122489afd20732cfe0de26e /Help | |
parent | fae66f4751128be8c65752730b9661a8bf22df3f (diff) | |
download | CMake-738cf491d42add506d153d25a9e2ef0c20d92311.zip CMake-738cf491d42add506d153d25a9e2ef0c20d92311.tar.gz CMake-738cf491d42add506d153d25a9e2ef0c20d92311.tar.bz2 |
Help: Organize and revise 3.31 release notes
Add section headers similar to the 3.30 release notes and move each
individual bullet into an appropriate section. Revise a few bullets.
Diffstat (limited to 'Help')
-rw-r--r-- | Help/release/3.31.rst | 378 |
1 files changed, 177 insertions, 201 deletions
diff --git a/Help/release/3.31.rst b/Help/release/3.31.rst index 7c516fc..b738c3d 100644 --- a/Help/release/3.31.rst +++ b/Help/release/3.31.rst @@ -7,270 +7,246 @@ CMake 3.31 Release Notes Changes made since CMake 3.30 include the following. -* On AIX, shared libraries may now be created as shared library archives. - See the :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE` variable - and :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE` target property. +New Features +============ -* The :prop_tgt:`MACOSX_FRAMEWORK_BUNDLE_NAME <MACOSX_FRAMEWORK_INFO_PLIST>` - target property was added to set the ``CFBundleName`` key in an Apple - :prop_tgt:`FRAMEWORK`'s ``Info.plist`` file. +Presets +------- -* The :variable:`CMAKE_HOST_EXECUTABLE_SUFFIX` variable was added to - provide suffix for executable names on the host platform. +* :manual:`cmake-presets(7)` files may now include comments using the key + ``$comment`` at any level within the JSON object to provide documentation. -* The :option:`cmake -LR[A][H]` option was added to list cache entries - whose names match a regular expression. +* :manual:`cmake-presets(7)` files may now request graphviz output using + the ``graphviz`` key in a configure preset. -* The :command:`cmake_pkg_config` command was added as an endpoint for using - CMake's native pkg-config format parser. The only supported option in this - release is ``EXTRACT``, which provides low-level access to the values - produced by parsing a pkg-config file. For most users, this is not yet a - suitable replacement for the :module:`FindPkgConfig` module. - -* When executing a CMake workflow preset, the ``--preset`` option can now be - omitted, allowing the simpler command line - :option:`cmake --workflow \<preset\> <cmake--workflow --preset>`. +Generators +---------- * The :ref:`Ninja Generators` and :ref:`Makefile Generators` now produce a ``codegen`` build target. See policy :policy:`CMP0171`. It drives a subset of the build graph sufficient to run custom commands created with :command:`add_custom_command`'s new ``CODEGEN`` option. -* The :command:`add_custom_command` command gained a ``CODEGEN`` option - to mark a custom commands outputs as dependencies of a ``codegen`` target. - -* The :cpack_gen:`CPack DEB Generator` gained a - :variable:`CPACK_DEBIAN_PACKAGE_MULTIARCH` option - to support multi-arch packages. - -* The :cpack_gen:`CPack IFW Generator` gained the new - :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS` variable to - specify images associated with entries of - :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGES`. - This feature is available for QtIFW 4.0 and newer. - -* The :cpack_gen:`CPack RPM Generator` gained support for ``zstd`` as a - :variable:`CPACK_RPM_COMPRESSION_TYPE` value. - -* The :module:`CPack` module enables per-machine installation by default - in the :cpack_gen:`CPack WIX Generator`. See policy :policy:`CMP0172` - and the :variable:`CPACK_WIX_INSTALL_SCOPE` variable. +Command-Line +------------ -* The :variable:`CMAKE_<LANG>_HOST_COMPILER_ID` and - :variable:`CMAKE_<LANG>_HOST_COMPILER_VERSION` variables were added, - where ``<LANG>`` is either ``CUDA`` or ``HIP``. They are populated - when :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA`` to identify - NVCC's host compiler. - -* The :module:`FindCUDAToolkit` module now provides a ``CUDA::nvml_static`` - target. - -* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now - verify TLS server certificates for connections to ``https://`` URLs by - default. See the :variable:`CMAKE_TLS_VERIFY` variable for details. - This change was made without a policy so that users are protected - even when building projects that have not been updated. - Users may set the :envvar:`CMAKE_TLS_VERIFY` environment - variable to ``0`` to restore the old default. +* The :option:`cmake --workflow` mode now accepts a preset name as the first + argument, allowing the simpler command line + :option:`cmake --workflow \<preset\> <cmake--workflow --preset>`. -* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` - step now verify TLS server certificates for connections to ``https://`` URLs - by default. See the :variable:`CTEST_TLS_VERIFY` variable for details. +* The :option:`cmake -LR[A][H]` option was added to list cache entries + whose names match a regular expression. -* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now - require TLS 1.2 or higher for connections to ``https://`` URLs by default. - See the :variable:`CMAKE_TLS_VERSION` variable for details. +Compilers +--------- -* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` - step now require TLS 1.2 or higher for connections to ``https://`` URLs by - default. See the :variable:`CTEST_TLS_VERSION` variable for details. +* The LFortran compiler is now supported with + :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``LFortran``. -* The :module:`CMakeFindFrameworks` module has been deprecated via - :policy:`CMP0173`. Projects should use :command:`find_library` instead. +Commands +-------- -* Compatibility with versions of CMake older than 3.10 is now deprecated - and will be removed from a future version. Calls to - :command:`cmake_minimum_required` or :command:`cmake_policy` that set - the policy version to an older value now issue a deprecation diagnostic. - -* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command was updated - to more closely match the dynamic loader's behavior on Linux. +* The :command:`add_custom_command` command gained a ``CODEGEN`` option + to mark a custom command's outputs as dependencies of a ``codegen`` target. + See policy :policy:`CMP0171`. -* The :command:`execute_process` command's ``ENCODING`` option, - meaningful on Windows, now defaults to ``UTF-8``. - See policy :policy:`CMP0176`. +* The :command:`cmake_pkg_config` command was added as an endpoint for using + CMake's native pkg-config format parser. The only supported option in this + release is ``EXTRACT``, which provides low-level access to the values + produced by parsing a pkg-config file. For most users, this is not yet a + suitable replacement for the :module:`FindPkgConfig` module. * The :command:`file(ARCHIVE_CREATE)` command gained a ``WORKING_DIRECTORY`` option to specify a working directory for the archiving process. -* The :module:`FindOpenMP` module gained support for the ``CUDA`` language. - -* The :command:`gtest_discover_tests` command gained a new - ``DISCOVERY_EXTRA_ARGS`` keyword. It allows extra arguments to be - appended to the command line when querying for the list of tests. - * The :command:`install(FILES)` and :command:`install(DIRECTORY)` commands' ``TYPE`` argument gained support for a ``LIBEXEC`` type. -* The :module:`CMakePackageConfigHelpers` module's - :command:`generate_apple_platform_selection_file` function - gained support iOS Mac Catalyst. +Variables +--------- -* The LFortran compiler is now supported with - :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``LFortran``. - -* The :variable:`CMAKE_LINK_LIBRARIES_STRATEGY` variable and - corresponding :prop_tgt:`LINK_LIBRARIES_STRATEGY` target - property were added to optionally specify the strategy - CMake uses to generate link lines. +* The :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE` variable and corresponding + :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE` target property were added to + create shared libraries on AIX as shared library archives. -* The :module:`CMakePushCheckState` module ``cmake_push_check_state``, - ``cmake_pop_check_state`` and ``cmake_reset_check_state`` macros - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :variable:`CMAKE_EXPORT_BUILD_DATABASE` variable, a corresponding + :envvar:`CMAKE_EXPORT_BUILD_DATABASE` environment variable, and an + :prop_tgt:`EXPORT_BUILD_DATABASE` target property, were added to + enable exporting C++ module compile commands. + This is only supported with :ref:`Ninja Generators`. -* The :module:`CheckCCompilerFlag` module ``check_c_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. - -* The :module:`CheckCSourceCompiles` module ``check_c_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. - -* The :module:`CheckCSourceRuns` module ``check_c_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. - -* The :module:`CheckCXXCompilerFlag` module ``check_cxx_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :variable:`CMAKE_HOST_EXECUTABLE_SUFFIX` variable was added to + provide the suffix for executable names on the host platform. -* The :module:`CheckCXXSourceCompiles` module ``check_cxx_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :variable:`CMAKE_<LANG>_HOST_COMPILER_ID` and + :variable:`CMAKE_<LANG>_HOST_COMPILER_VERSION` variables were added, + where ``<LANG>`` is either ``CUDA`` or ``HIP``. They are populated + when :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA`` to identify + NVCC's host compiler. -* The :module:`CheckCXXSourceRuns` module ``check_cxx_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :variable:`CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES` variable was added. + Toolchain files can set this variable to control which link library directory + paths are always passed to the compiler for the specified language. -* The :module:`CheckCXXSymbolExists` module ``check_cxx_symbol_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :variable:`CMAKE_LINK_LIBRARIES_STRATEGY` variable and + corresponding :prop_tgt:`LINK_LIBRARIES_STRATEGY` target + property were added to optionally specify the strategy + CMake uses to generate link lines. -* The :module:`CheckCompilerFlag` module ``check_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +Properties +---------- -* The :module:`CheckFortranCompilerFlag` module ``check_fortran_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :prop_tgt:`MACOSX_FRAMEWORK_BUNDLE_NAME <MACOSX_FRAMEWORK_INFO_PLIST>` + target property was added to set the ``CFBundleName`` key in an Apple + :prop_tgt:`FRAMEWORK`'s ``Info.plist`` file. -* The :module:`CheckFortranFunctionExists` module ``check_fortran_function_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :prop_tgt:`UNITY_BUILD` target property now supports the + ``CUDA`` language. -* The :module:`CheckFortranSourceCompiles` module ``check_fortran_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :prop_tgt:`VS_FRAMEWORK_REFERENCES` target property was added + to tell :ref:`Visual Studio Generators` to add framework references. -* The :module:`CheckFortranSourceRuns` module ``check_fortran_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +Modules +------- + +* Check modules now support a ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. + The following modules gained this support: + + * :module:`CMakePushCheckState` + * :module:`CheckCCompilerFlag` + * :module:`CheckCSourceCompiles` + * :module:`CheckCSourceRuns` + * :module:`CheckCXXCompilerFlag` + * :module:`CheckCXXSourceCompiles` + * :module:`CheckCXXSourceRuns` + * :module:`CheckCXXSymbolExists` + * :module:`CheckCompilerFlag` + * :module:`CheckFortranCompilerFlag` + * :module:`CheckFortranFunctionExists` + * :module:`CheckFortranSourceCompiles` + * :module:`CheckFortranSourceRuns` + * :module:`CheckFunctionExists` + * :module:`CheckIncludeFile` + * :module:`CheckIncludeFileCXX` + * :module:`CheckIncludeFiles` + * :module:`CheckOBJCCompilerFlag` + * :module:`CheckLibraryExists` + * :module:`CheckOBJCCompilerFlag` + * :module:`CheckOBJCSourceCompiles` + * :module:`CheckOBJCSourceRuns` + * :module:`CheckOBJCXXCompilerFlag` + * :module:`CheckOBJCXXSourceCompiles` + * :module:`CheckOBJCXXSourceRuns` + * :module:`CheckPrototypeDefinition` + * :module:`CheckSourceCompiles` + * :module:`CheckSourceRuns` + * :module:`CheckStructHasMember` + * :module:`CheckSymbolExists` + * :module:`CheckTypeSize` + * :module:`CheckVariableExists` -* The :module:`CheckFunctionExists` module ``check_function_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`CMakePackageConfigHelpers` module's + :command:`generate_apple_platform_selection_file` function + gained support for iOS Mac Catalyst. -* The :module:`CheckIncludeFile` module ``check_include_file`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`GoogleTest` module :command:`gtest_discover_tests` command + gained a new ``DISCOVERY_EXTRA_ARGS`` keyword. It allows extra arguments + to be appended to the command line when querying for the list of tests. -* The :module:`CheckIncludeFileCXX` module ``check_include_file_cxx`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`FindCUDAToolkit` module now provides a ``CUDA::nvml_static`` + target. -* The :module:`CheckIncludeFiles` module ``check_include_files`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`FindOpenMP` module gained support for the ``CUDA`` language. -* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +CTest +----- -* The :module:`CheckLibraryExists` module ``check_library_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` + step now verify TLS server certificates for connections to ``https://`` URLs + by default. See the :variable:`CTEST_TLS_VERIFY` variable for details. -* The :module:`CheckOBJCCompilerFlag` module ``check_objc_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` + step now require TLS 1.2 or higher for connections to ``https://`` URLs by + default. See the :variable:`CTEST_TLS_VERSION` variable for details. -* The :module:`CheckOBJCSourceCompiles` module ``check_objc_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +CPack +----- -* The :module:`CheckOBJCSourceRuns` module ``check_objc_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :cpack_gen:`CPack DEB Generator` gained a + :variable:`CPACK_DEBIAN_PACKAGE_MULTIARCH` option + to support multi-arch packages. -* The :module:`CheckOBJCXXCompilerFlag` module ``check_objcxx_compiler_flag`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :cpack_gen:`CPack IFW Generator` gained the new + :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS` variable to + specify images associated with entries of + :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGES`. + This feature is available for QtIFW 4.0 and newer. -* The :module:`CheckOBJCXXSourceCompiles` module ``check_objcxx_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :cpack_gen:`CPack RPM Generator` gained support for ``zstd`` as a + :variable:`CPACK_RPM_COMPRESSION_TYPE` value. -* The :module:`CheckOBJCXXSourceRuns` module ``check_objcxx_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`CPack` module enables per-machine installation by default + in the :cpack_gen:`CPack WIX Generator`. See policy :policy:`CMP0172` + and the :variable:`CPACK_WIX_INSTALL_SCOPE` variable. -* The :module:`CheckPrototypeDefinition` module ``check_prototype_definition`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +Deprecated and Removed Features +=============================== -* The :module:`CheckSourceCompiles` module ``check_source_compiles`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* Compatibility with versions of CMake older than 3.10 is now deprecated + and will be removed from a future version. Calls to + :command:`cmake_minimum_required` or :command:`cmake_policy` that set + the policy version to an older value now issue a deprecation diagnostic. -* The :module:`CheckSourceRuns` module ``check_source_runs`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :module:`CMakeFindFrameworks` module has been deprecated via + :policy:`CMP0173`. Projects should use :command:`find_library` instead. -* The :module:`CheckStructHasMember` module ``check_struct_has_member`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* The :generator:`Visual Studio 12 2013` generator has been removed. -* The :module:`CheckSymbolExists` module ``check_symbol_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +Other Changes +============= -* The :module:`CheckTypeSize` module ``check_type_size`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* When static libraries on link lines are de-duplicated (by policy + :policy:`CMP0156`), the first occurrence is now kept on all platforms. + See policy :policy:`CMP0179`. -* The :module:`CheckVariableExists` module ``check_variable_exists`` macro - learned to honor the ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable. +* Empty list elements in the :prop_tgt:`TEST_LAUNCHER` and + :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are now preserved by: -* Targets with C++ modules may now export their module compile commands using - the :prop_tgt:`EXPORT_BUILD_DATABASE` target property. This is initialized - with the :variable:`CMAKE_EXPORT_BUILD_DATABASE` variable which is itself - initialized using the :envvar:`CMAKE_EXPORT_BUILD_DATABASE` environment - variable. Only supported with the :ref:`Ninja Generators`. + * The :command:`add_test` command. + * The :command:`ExternalData_Add_Test` command from the + :module:`ExternalData` module. + * The :command:`gtest_add_tests` and :command:`gtest_discover_tests` + commands from the :module:`GoogleTest` module. + Empty list elements after the ``EXTRA_ARGS`` keyword of these + two commands are also now preserved. -* All ``DESTINATION`` arguments in :command:`install` commands - are now :ref:`normalized <Normalization>`, with the exception - of ``INCLUDES DESTINATION`` arguments in the ``TARGETS`` form. + See policy :policy:`CMP0178`. -* Empty list elements in the :prop_tgt:`TEST_LAUNCHER` and - :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are now preserved - when the executable for a command given to :command:`add_test` is a CMake - target. See policy :policy:`CMP0178`. +* The :command:`execute_process` command's ``ENCODING`` option, + meaningful on Windows, now defaults to ``UTF-8``. + See policy :policy:`CMP0176`. -* Empty list elements in the :prop_tgt:`TEST_LAUNCHER` and - :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are now preserved - for the test created by :command:`ExternalData_Add_Test` from the - :module:`ExternalData` module. See policy :policy:`CMP0178`. +* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now + verify TLS server certificates for connections to ``https://`` URLs by + default. See the :variable:`CMAKE_TLS_VERIFY` variable for details. + This change was made without a policy so that users are protected + even when building projects that have not been updated. + Users may set the :envvar:`CMAKE_TLS_VERIFY` environment + variable to ``0`` to restore the old default. -* Empty list elements in the :prop_tgt:`TEST_LAUNCHER` and - :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are now preserved - for tests created by :command:`gtest_add_tests` and - :command:`gtest_discover_tests` from the :module:`GoogleTest` module. - Empty list elements after the ``EXTRA_ARGS`` keyword of these two commands - are also now preserved. See policy :policy:`CMP0178`. +* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now + require TLS 1.2 or higher for connections to ``https://`` URLs by default. + See the :variable:`CMAKE_TLS_VERSION` variable for details. -* Preset files may now include comments using the key ``$comment`` - at any level within the JSON object to provide documentation. +* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command was updated + to more closely match the dynamic loader's behavior on Linux. -* Preset files may now request graphviz output using the ``graphviz`` key - in a configure preset. +* The :command:`install` command's ``DESTINATION`` arguments are + now :ref:`normalized <Normalization>`, with the exception + of ``INCLUDES DESTINATION`` arguments in :command:`install(TARGETS)`. + See policy :policy:`CMP0177`. * The :command:`project` command now always sets :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`, and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as both normal variables and cache entries. See policy :policy:`CMP0180`. - -* The :generator:`Visual Studio 12 2013` generator has been removed. - -* The :variable:`CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES` variable was added. - Toolchain files can set this variable to control which link library directory - paths are always passed to the compiler for the specified language. - -* When static libraries on link lines are de-duplicated (by policy - :policy:`CMP0156`), the first occurrence is now kept on all platforms. - See policy :policy:`CMP0179`. - -* The :prop_tgt:`UNITY_BUILD` target property now supports the - CUDA (``CUDA``) language. - -* The :prop_tgt:`VS_FRAMEWORK_REFERENCES` target property was added - to tell :ref:`Visual Studio Generators` to add framework references. |