diff options
author | Brad King <brad.king@kitware.com> | 2024-06-27 15:22:04 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-06-27 15:22:43 (GMT) |
commit | 9ee9571b2e209fc507bcdcba06cd04db06da17a7 (patch) | |
tree | 37b26a0fc97eb206e5273f1f7016579c4765108b | |
parent | e053d6f81b725137e61485755e89031d0b9cbfa1 (diff) | |
parent | 0721f9bf0fefb159be48c23847e5654e0b31f0cb (diff) | |
download | CMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.zip CMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.tar.gz CMake-9ee9571b2e209fc507bcdcba06cd04db06da17a7.tar.bz2 |
Merge topic 'vs-framework-references'
0721f9bf0f VS: Add VS_FRAMEWORK_REFERENCES
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !9626
-rw-r--r-- | Auxiliary/vim/syntax/cmake.vim | 1 | ||||
-rw-r--r-- | Help/manual/cmake-properties.7.rst | 1 | ||||
-rw-r--r-- | Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst | 12 | ||||
-rw-r--r-- | Help/release/dev/vs-framework-references.rst | 5 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 16 | ||||
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.h | 1 | ||||
-rw-r--r-- | Tests/RunCMake/VS10Project/RunCMakeTest.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake | 24 | ||||
-rw-r--r-- | Tests/RunCMake/VS10Project/VsFrameworkReference.cmake | 8 |
9 files changed, 69 insertions, 0 deletions
diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim index 5d412c2..f9efd9e 100644 --- a/Auxiliary/vim/syntax/cmake.vim +++ b/Auxiliary/vim/syntax/cmake.vim @@ -416,6 +416,7 @@ syn keyword cmakeProperty contained \ VS_DOTNET_STARTUP_OBJECT \ VS_DOTNET_TARGET_FRAMEWORK_VERSION \ VS_DPI_AWARE + \ VS_FRAMEWORK_REFERENCES \ VS_GLOBAL_KEYWORD \ VS_GLOBAL_PROJECT_TYPES \ VS_GLOBAL_ROOTNAMESPACE diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index 673bc7c..fea661a 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -430,6 +430,7 @@ Properties on Targets /prop_tgt/VS_DOTNET_STARTUP_OBJECT /prop_tgt/VS_DOTNET_TARGET_FRAMEWORK_VERSION /prop_tgt/VS_DPI_AWARE + /prop_tgt/VS_FRAMEWORK_REFERENCES /prop_tgt/VS_GLOBAL_KEYWORD /prop_tgt/VS_GLOBAL_PROJECT_TYPES /prop_tgt/VS_GLOBAL_ROOTNAMESPACE diff --git a/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst b/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst new file mode 100644 index 0000000..925ac68 --- /dev/null +++ b/Help/prop_tgt/VS_FRAMEWORK_REFERENCES.rst @@ -0,0 +1,12 @@ +VS_FRAMEWORK_REFERENCES +----------------------- + +.. versionadded:: 3.31 + +Visual Studio framework references. +Specify a :ref:`semicolon-separated list <CMake Language Lists>` of framework references +to be added to a generated Visual Studio project. For example: + +* "Microsoft.WindowsDesktop.App.WPF" for WPF applications +* "Microsoft.WindowsDesktop.App.WindowsForms" for WinForms applications +* "Microsoft.WindowsDesktop.App" for applications using both frameworks diff --git a/Help/release/dev/vs-framework-references.rst b/Help/release/dev/vs-framework-references.rst new file mode 100644 index 0000000..1f50b50 --- /dev/null +++ b/Help/release/dev/vs-framework-references.rst @@ -0,0 +1,5 @@ +vs-framework-references +----------------------- + +* The :prop_tgt:`VS_FRAMEWORK_REFERENCES` target property was added + to tell :ref:`Visual Studio Generators` to add framework references. diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 0fb8bae..eb14e24 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -813,6 +813,7 @@ void cmVisualStudio10TargetGenerator::WriteClassicMsBuildProjectFile( this->WriteCustomCommands(e0); this->WriteAllSources(e0); this->WriteDotNetReferences(e0); + this->WriteFrameworkReferences(e0); this->WritePackageReferences(e0); this->WriteImports(e0); this->WriteEmbeddedResourceGroup(e0); @@ -1187,6 +1188,21 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReference( this->WriteDotNetReferenceCustomTags(e2, ref); } +void cmVisualStudio10TargetGenerator::WriteFrameworkReferences(Elem& e0) +{ + cmList references; + if (cmValue vsFrameworkReferences = + this->GeneratorTarget->GetProperty("VS_FRAMEWORK_REFERENCES")) { + references.assign(*vsFrameworkReferences); + } + + Elem e1(e0, "ItemGroup"); + for (auto const& ref : references) { + Elem e2(e1, "FrameworkReference"); + e2.Attribute("Include", ref); + } +} + void cmVisualStudio10TargetGenerator::WriteImports(Elem& e0) { cmValue imports = diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h index 056f426..53eb1af 100644 --- a/Source/cmVisualStudio10TargetGenerator.h +++ b/Source/cmVisualStudio10TargetGenerator.h @@ -91,6 +91,7 @@ private: void WriteDotNetReference(Elem& e1, std::string const& ref, std::string const& hint, std::string const& config); + void WriteFrameworkReferences(Elem& e0); void WriteDotNetDocumentationFile(Elem& e0); void WriteImports(Elem& e0); void WriteDotNetReferenceCustomTags(Elem& e2, std::string const& ref); diff --git a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake index e0d74cf..85fefbf 100644 --- a/Tests/RunCMake/VS10Project/RunCMakeTest.cmake +++ b/Tests/RunCMake/VS10Project/RunCMakeTest.cmake @@ -98,6 +98,7 @@ run_cmake(DebugInformationFormat) run_cmake(VsCLREmpty) run_cmake(VsCLRPure) run_cmake(VsCLRSafe) +run_cmake(VsFrameworkReference) if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.20) run_cmake(VsCLRNetcore) diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake new file mode 100644 index 0000000..7abe8a0 --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsFrameworkReference-check.cmake @@ -0,0 +1,24 @@ +set(vcProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.vcxproj") +if(NOT EXISTS "${vcProjectFile}") + set(RunCMake_TEST_FAILED "Project file ${vcProjectFile} does not exist.") + return() +endif() + +set(frameworkReferenceSet FALSE) + +file(STRINGS "${vcProjectFile}" lines) +foreach(line IN LISTS lines) + if(line MATCHES "^ *<FrameworkReference Include=\"([^\"]*)\" />$") + if("${CMAKE_MATCH_1}" STREQUAL "Microsoft.WindowsDesktop.App.WPF") + message(STATUS "foo.vcxproj has FrameworkReference set") + set(frameworkReferenceSet TRUE) + else() + message(STATUS "foo.vcxproj has FrameworkReference incorrectly set to ${CMAKE_MATCH_1}") + endif() + endif() +endforeach() + +if(NOT frameworkReferenceSet) + set(RunCMake_TEST_FAILED "FrameworkReference not found or not set correctly.") + return() +endif() diff --git a/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake new file mode 100644 index 0000000..0e4d6fb --- /dev/null +++ b/Tests/RunCMake/VS10Project/VsFrameworkReference.cmake @@ -0,0 +1,8 @@ +enable_language(CXX) + +add_executable(foo foo.cpp) + +set_target_properties(foo PROPERTIES + COMMON_LANGUAGE_RUNTIME "netcore" + DOTNET_TARGET_FRAMEWORK "net8.0-windows" + VS_FRAMEWORK_REFERENCES "Microsoft.WindowsDesktop.App.WPF") |