我目前正在尝试使用CMake设置Visual Studio 2017 UWP项目。 所以我做了互联网给我的工作,并设置了这样一个基本项目:
cmake_minimum_required(VERSION 3.0)
project(windowsClient
VERSION 1.0.0
LANGUAGES CXX
)
add_executable(windowsClient
src/App.xaml.cpp
src/MainPage.xaml.cpp
src/App.xaml.h
src/MainPage.xaml.h
src/MainPage.xaml
src/App.xaml
src/Package.appxmanifest
src/pch.h
src/pch.cpp
)
# This is needed because otherwise the App.xaml would be detected as "Page" by CMake
set_source_files_properties(
src/App.xaml
PROPERTIES
VS_XAML_TYPE ApplicationDefinition
)
# Here I set the target System to WindowsStore, which *should* enable UWP-support
set_target_properties(windowsClient
PROPERTIES
CMAKE_SYSTEM_NAME WindowsStore
CMAKE_SYSTEM_VERSION 10.0
)
但是当我为此生成Visual Studio 2017项目时,会生成WPF项目。这导致问题是无法在Visual Editor中编辑XAML文件,因为XML包含未知标记。此外,VS无法正确显示与相关.xaml.cpp和.xaml.h文件的连接。编译失败,有两个主要错误:
Here我找到了在我的CMake目标上设置属性VS_WINRT_COMPONENT TRUE
的提示。这样可以改善这种情况,因为.xaml.cpp和.xaml.h文件现在正确地显示为它的.xaml定义的子项,并且它的标签似乎是已知的。此外,还添加了用于支持Microsofts C ++ / CX语言扩展的所需/ZW
编译器标志。但汇编显示,我仍然没有走上正轨:
我分析了情况并发现,CMake生成的.vcxproject-File错过了 Globals 中的这些重要行 - 章节:
<AppContainerApplication>true</AppContainerApplication>
<ApplicationType>Windows Store</ApplicationType>
<WindowsTargetPlatformVersion Condition=" '$(WindowsTargetPlatformVersion)' == '' ">10.0.16299.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.10586.0</WindowsTargetPlatformMinVersion>
<ApplicationTypeRevision>10.0</ApplicationTypeRevision>
当我手动添加它们时,项目被正确检测为UWP-Project(由Project-Explorer中构建目标后面的文本(Universal Windows)
表示。还有.xaml.cpp和.xaml.h文件现在正确地显示为它的.xaml定义的子项。编译仍然会引发一些错误,但这显然是正确的方法。
VS_WINRT_COMPONENT
属性究竟做了什么?我没有足够的Windows生态系统知识来完全理解它的CMakes文档,但我觉得我实际上并不需要它,并且我缺少设置其他属性。