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:禁用警告“模块的伞头不包括头”的主要内容,如果未能解决你的问题,请参考以下文章
如何从 TBAA 元数据节点 (MDNode) [llvm 7.0] 中获取类型