Xcode:LLVM 7.0:禁用警告“模块的伞头不包括头”

Posted

技术标签:

【中文标题】Xcode:LLVM 7.0:禁用警告“模块的伞头不包括头”【英文标题】:Xcode: LLVM 7.0: Disable warning "Umbrella header for module does not include header" 【发布时间】:2015-10-09 02:23:41 【问题描述】:

为了让我的 Objective-C 框架在我的 Swift cocoa touch 框架中成功链接,我必须使用 this unpretty workaround,这涉及将所有框架头文件作为公共头文件导入项目。

我完全不需要它们都出现在我的伞形标题中,所以我想以某种方式删除生成的一堆警告。 (“模块 'Foo' 的伞形标头不包括标头”)。我在构建设置中检查了 LLVM 警告设置,但找不到它。

【问题讨论】:

【参考方案1】:

如果您从“编译 Swift 源文件”▸“预编译桥接头”构建步骤(也标记为 PrecompileSwiftBridgingHeader)中收到此警告,请按以下方式抑制它:

    为您的项目找到构建设置。 搜索“其他 Swift 标志”。 将 -Xcc-Wno-incomplete-umbrella 添加到“其他 Swift 标志”(按此顺序)。

【讨论】:

这正是我所需要的。谢谢! 非常感谢! 你能解释一下-Xcc在做什么吗? -Xcc 告诉 swift 驱动程序将以下参数传递给 C 编译器。【参考方案2】:

警告标志是-Wincomplete-umbrella,所以要抑制,传递-Wno-incomplete-umbrella

【讨论】:

【参考方案3】:

尝试将标头角色从公共设置为项目,并确保您不会从自己的标头中引用任何第三方标头 - 仅来自实现。

任何具有公共角色的标头都必须导入到伞形标头中。

【讨论】:

目的实际上是链接第三方框架,将所有第三方框架标头作为公共导入的解决方法可以避免“包含非模块化标头”链接器错误,但您不希望公开这些标头,这就是为什么您只想忽略警告而不将它们包含在伞形标头中的原因。

以上是关于Xcode:LLVM 7.0:禁用警告“模块的伞头不包括头”的主要内容,如果未能解决你的问题,请参考以下文章

在 gitlab 日志中禁用 xcode 警告

如何从 TBAA 元数据节点 (MDNode) [llvm 7.0] 中获取类型

CentOS 7.0 编译安装LLVM7.0.0版本

xcode禁用ARC(Automatic Reference Counting)

如何抑制 LLVM 自动合成警告?

解决XCODE配置LLVM环境出现的问题