使用CMake

时间:2018-04-01 08:02:44

标签: c++ cmake uwp visual-studio-2017

我目前正在尝试使用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文件的连接。编译失败,有两个主要错误:

  1. “应用程序”在einem Windows Presentation Foundation(WPF)-Projektnichtunterstützt中发布。 WPF项目不支持翻译:“应用程序”。)
  2. C1189 #error:collection.h需要/ ZW编译器选项。
  3. Here我找到了在我的CMake目标上设置属性VS_WINRT_COMPONENT TRUE的提示。这样可以改善这种情况,因为.xaml.cpp和.xaml.h文件现在正确地显示为它的.xaml定义的子项,并且它的标签似乎是已知的。此外,还添加了用于支持Microsofts C ++ / CX语言扩展的所需/ZW编译器标志。但汇编显示,我仍然没有走上正轨:

    • MSB3843 Das Projekt“windowsClient”帽子Ziel Plattform“Windows”,verveist jedoch auf SDK“Visual C ++ 2015 Runtime for Universal Windows Platform Apps v14.0”mit der Zielplattform“UAP”。 翻译:该项目具有目标平台“Windows”,但引用SDK“Visual C ++ blabla v14.0”与目标平台“UAP”) < / LI>

    我分析了情况并发现,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定义的子项。编译仍然会引发一些错误,但这显然是正确的方法。

    你可以给我一个暗示我缺少的东西吗?虽然我将系统名称设置为“Windows Store”,但为什么不通过cmake正确生成VS-Project? VS_WINRT_COMPONENT属性究竟做了什么?我没有足够的Windows生态系统知识来完全理解它的CMakes文档,但我觉得我实际上并不需要它,并且我缺少设置其他属性。

0 个答案:

没有答案