【问题标题】:Build UWP apps using Ninja?使用 Ninja 构建 UWP 应用?
【发布时间】:2019-01-17 19:43:04
【问题描述】:

我们可以使用 ninja 构建 UWP 应用程序并因此创建 appx 包吗? 我不觉得有相同的在线文章。我知道如何使用 VS 和 Make。

【问题讨论】:

  • 您可以尝试为 UWP 应用设置 CMake 项目并使用 Ninja 生成器 (-GNinja)。这会为 Ninja 生成输入文件,以防你想玩弄它。

标签: build cmake uwp windows-store-apps ninja


【解决方案1】:

您可以通过以下方式创建 uwp 应用程序:

  1. c# 和 xaml

  2. html、css 和 js 等网络技术。你可以使用任何 第三方js库。您甚至可以使用托管的网络应用程序 因为 uwp 应用程序或 pwas 等最新技术也可以作为 uwp 应用程序。更多:https://developer.microsoft.com/en-us/windows/pwa

  3. c++ 和 xaml:通过这种方法,您可以使用 c++ 库(如果它们符合 uwp 平台),您没有太多在线支持的原因是大多数 uwp 开发人员使用 c# 和 xaml 方法。

有一些解决方法,其中之一是创建一个桌面应用程序,然后将其打包在 MSIX 打包中,它将一个 Windows 桌面应用程序打包到一个 uwp 应用程序中,您甚至可以通过 Microsoft 商店分发它.

CMake 不能用于生成 UWP 包。但是,您可以使用make.exeVisual Studio 来生成UWP 包。更多内容可以参考Create an app package with the MakeAppx.exe toolPackage a UWP app with Visual Studio

【讨论】:

  • 严重误导。您可以(甚至应该)使用 C++ 构建 UWP 应用程序。由于Ninja(和 CMake)的目标是构建原生应用程序,因此这一点非常重要,而这个提议的答案并没有承认这一点。
  • 这仍然不正确。你可以使用 C++ 编写 UWP 应用,而无需使用 XAML。你也不能使用"any c++ library"。你使用的库仍然需要满足 UWP 或 Microsoft Store 的要求。而且它仍然无法解决,Ninja 是否可以用作构建系统来生成 UWP 应用程序,如果可以,如何做到这一点。鉴于 CMake 提供的对 UWP 的支持有限,如果没有 显着 自定义,Ninja 不太可能这样做。
  • 感谢您的更正,我再次编辑了我的问题。
  • 这仍然无法解决问题。 Ninja 是一个构建系统,例如 MSBuild,您正在使用它(有意或无意地)将代码和资产转换为可部署的包。 MSBuild 解析 *.sln 和 *.csproj 文件以配置环境以驱动构建管道。 Ninja 在原生环境中承担同样的责任。问题不在于您是否可以编写本机 UWP 应用程序(是的,您可以,而且您应该!),而是是否可以使用 Ninja 来设置构建过程,如果可以,如何设置。
  • copying another answer verbatim 时,习惯(甚至要求)提供归属。由于该陈述被证明是不真实的(您可以使用add_custom_command 在CMake 中执行any 命令),因此您至少可以指责其他人。您似乎在努力提供一个需要熟悉您不知道也不理解的工具和系统的答案。有时最好放手。
【解决方案2】:

理论上:是的

值得注意的一点:Ninja 只是官方支持 C++,我找不到任何结果 Ninja 支持其他编程语言

对于 C++,我们有 2 个选项:

  • C++/CX:您应该为 Windows 元数据激活标志 /ZW
  • C++/WinRT:使用 WinRT,您只需编译,没有任何限制,这不再需要 Windows 元数据

C++/CX:在 C++ 11/14 正式发布之前,我们在 Windows 运行时开发背后的故事由来已久,因此微软将自己的实现功能添加到 MSVC。因此,使用 C++/CX,您可以使用非常旧的 SDK(如 10240、10586...)进行编译,理论上它也适用于 Windows 8.0/8.1 SDK、Windows Phone 8.0/8.1 SDK。另一个尝试在 FastBuild 上使用 C++/CX 编译 UWP(系统构建像 Ninja)是成功的,您可以在此处阅读作为参考:https://github.com/fastbuild/fastbuild/issues/623

C++/WinRT 是重新尝试使 Windows 运行时回到标准 C++ 17。C++/WinRT 也可以使用 Clang/GCC 进行编译。基于 Kenny Kerr(C++/WinRT 的创建者)的回答:C++/WinRT 不受旧 SDK 的限制,但他建议使用较新的 SDK,例如 17134。链接他的答案https://stackoverflow.com/a/53193711/8707331

一些对 C++ UWP 有用的链接:

https://github.com/MicrosoftDocs/cpp-docs/blob/master/docs/porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app.md

https://modernwindows.wordpress.com/2015/05/28/modern-c-and-clang/

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多