【问题标题】:Targeting C++/WinRT with CMake使用 CMake 以 C++/WinRT 为目标
【发布时间】:2019-11-22 02:24:14
【问题描述】:

我正在编译一个基于 CMake 的第三方 C++ 共享库,以便在 UWP 应用程序中使用。

根据 MSDN 上的文档,我一直在使用标志 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 进行构建。虽然这对于标记任何不允许或不可用的 API 非常有用,但我的理解是它设置了 /ZW 标志,从而启用 C++/CX

除了一些小问题(例如:库处理网络,并使用变量名 interface 这显然是 C++/CX 的保留关键字)之外,这大部分都很好。

更根本的是,由于我正在构建标准 C++ 库,我宁愿使用标准 C++ (C++/WinRT)。有没有办法告诉 CMake 以 WindowsStore SDK 为目标,但不携带 C++/CX?

【问题讨论】:

  • 我对@9​​87654321@ 的阅读表明它关闭 CompileAsWinRt 标志,这将添加/ZW-
  • 嗯,也许我错误地确定了问题的根本原因。它的基础是——当我构建时,变量名interface 被选为关键字,这告诉我正在使用 C++/CX 编译器,而不是标准 C++。我将深入研究 cmake 源代码,并根据需要改写我的问题。感谢您的提示。
  • 一个 MCVE 和相应的错误代码将帮助我们帮助您。
  • 当然——抱歉,我认为这是一个更普遍的问题。我将用 interface 关键字重新措辞标题/正文以针对我的特定问题,包括一个最小的示例。
  • 原来我确实在这里混淆了问题。无论图片中是否包含 WinRT/UWP,interface 似乎都是 MSVC (docs.microsoft.com/en-us/cpp/cpp/interface?view=vs-2019) 上的保留关键字。为噪音道歉,并感谢指向 cmake 代码的指针@Botje

标签: c++ windows uwp cmake c++-winrt


【解决方案1】:

这是一个错误的问题。根本问题与 C++/CX 或 UWP 无关——包括windows.h 拉入具有#define interface __STRUCT__combaseapi.h。因此,MSVC 将 interface 视为 struct 关键字。

[引用interface 的原始错误答案是https://docs.microsoft.com/en-us/cpp/cpp/interface?view=vs-2019 在MSVC 上的保留关键字。正如 cmets 中所指出的,这也不正确]

【讨论】:

  • MSVC 是一个 C++ 编译器。它不引入非标准关键字。您链接到的文档描述了关键字__interface。前导双下划线将其移动到保留供实现使用的命名空间中。任何编译器都可以出于任何目的使用该命名空间。
  • 啊哈——谢谢。是的,事实证明我的问题是combaseapi.h(在windows.h内)有#define interface __STRUCT__
猜你喜欢
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多