浏览代码

Merge topic 'vs2022' into release-3.21

b6ac10394b VS: Update Visual Studio 17 2022 generator for Preview 4
f200f4d5a7 VS: Fix managed C++ project generation for VS 2022

Acked-by: Kitware Robot <[email protected]>
Merge-request: !6524
Brad King 4 年之前
父节点
当前提交
64aac043ee

+ 2 - 2
Help/generator/Visual Studio 17 2022.rst

@@ -7,7 +7,7 @@ Generates Visual Studio 17 (VS 2022) project files.
 
 
 .. warning::
 .. warning::
 
 
-  This is experimental and based on "Visual Studio 2022 Preview 3.1".
+  This is experimental and based on "Visual Studio 2022 Preview 4".
   As of this version of CMake, VS 2022 has not been released.
   As of this version of CMake, VS 2022 has not been released.
 
 
 Project Types
 Project Types
@@ -51,7 +51,7 @@ name (architecture).  For example:
 Toolset Selection
 Toolset Selection
 ^^^^^^^^^^^^^^^^^
 ^^^^^^^^^^^^^^^^^
 
 
-The ``v143`` toolset that comes with VS 17 2022 Preview 3.1 is selected by
+The ``v143`` toolset that comes with VS 17 2022 Preview 4 is selected by
 default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
 default.  The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps
 via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
 via the :manual:`cmake(1)` ``-T`` option, to specify another toolset.
 
 

+ 7 - 1
Help/release/3.21.rst

@@ -27,7 +27,7 @@ Generators
 ----------
 ----------
 
 
 * The :generator:`Visual Studio 17 2022` generator was added.  This is
 * The :generator:`Visual Studio 17 2022` generator was added.  This is
-  experimental and based on "Visual Studio 2022 Preview 3.1" because this
+  experimental and based on "Visual Studio 2022 Preview 4" because this
   version of VS has not been released.
   version of VS has not been released.
 
 
 * The :ref:`Makefile Generators` and the :generator:`Ninja` generator
 * The :ref:`Makefile Generators` and the :generator:`Ninja` generator
@@ -313,3 +313,9 @@ Changes made since CMake 3.21.0 include the following.
 
 
 * The :generator:`Visual Studio 17 2022` generator is now based on
 * The :generator:`Visual Studio 17 2022` generator is now based on
   "Visual Studio 2022 Preview 3.1".  Previously it was based on "Preview 2".
   "Visual Studio 2022 Preview 3.1".  Previously it was based on "Preview 2".
+
+3.21.3
+------
+
+* The :generator:`Visual Studio 17 2022` generator is now based on
+  "Visual Studio 2022 Preview 4".  Previously it was based on "Preview 3.1".

+ 4 - 0
Source/cmVisualStudio10TargetGenerator.cxx

@@ -581,6 +581,10 @@ void cmVisualStudio10TargetGenerator::Generate()
       }
       }
 
 
       if (this->Managed) {
       if (this->Managed) {
+        if (this->LocalGenerator->GetVersion() >=
+            cmGlobalVisualStudioGenerator::VS17) {
+          e1.Element("ManagedAssembly", "true");
+        }
         std::string outputType;
         std::string outputType;
         switch (this->GeneratorTarget->GetType()) {
         switch (this->GeneratorTarget->GetType()) {
           case cmStateEnums::OBJECT_LIBRARY:
           case cmStateEnums::OBJECT_LIBRARY:

+ 6 - 0
Tests/VSWindowsFormsResx/CMakeLists.txt

@@ -33,6 +33,12 @@ set(TARGET_RESX
 
 
 set(TARGET_LIBRARIES ${SYSLIBS})
 set(TARGET_LIBRARIES ${SYSLIBS})
 add_executable(${PROJECT_NAME} ${TARGET_SRC} ${TARGET_H} ${TARGET_RESX})
 add_executable(${PROJECT_NAME} ${TARGET_SRC} ${TARGET_H} ${TARGET_RESX})
+if(NOT CMAKE_GENERATOR MATCHES "Visual Studio 1[0-6]")
+  # VS 17 2022 and above require a global mark on managed assemblies.
+  # CMake adds this automatically when using COMMON_LANGUAGE_RUNTIME,
+  # but this test covers direct use of /clr.
+  set_property(TARGET ${PROJECT_NAME} PROPERTY VS_GLOBAL_ManagedAssembly "true")
+endif()
 
 
 # Note: The property VS_GLOBAL_KEYWORD must be set.
 # Note: The property VS_GLOBAL_KEYWORD must be set.
 set_property(TARGET ${PROJECT_NAME} PROPERTY VS_GLOBAL_KEYWORD "ManagedCProj")
 set_property(TARGET ${PROJECT_NAME} PROPERTY VS_GLOBAL_KEYWORD "ManagedCProj")