使用--system-header-prefix和Xcode 5.1.1 - 我错过了什么

时间:2014-04-28 09:41:08

标签: xcode clang

Clang’s documentation提到了一个名为--system-header-prefix的标记的可用性。

这个想法是所有包含与此前缀匹配的标题将被视为系统标题,而不会生成警告。

我想使用此标记,而不是使用-isystem代替-I来包含这些标头。

背景

我碰巧有一个(新)项目依赖于几个遗留库,但它本身具有非常严格的警告设置,并将这些警告视为错误。 结果是(并不太令人惊讶)一个项目由于所包含的遗留库的标题生成的警告而无法构建。

我们的想法是在Xcode的--system-header-prefix=legacyLib/构建设置中使用OTHER_CFLAGS

但是,如果我这样做,clang会给我以下错误消息:

clang: error: unsupported option '--system-header-prefix=legacyLib/'

我使用的是版本5.1.1(5B1008) - 即当前的公开发布。

clang --version的输出是

clang --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

1 个答案:

答案 0 :(得分:10)

您指的是Clang 3.5文档。在Clang 3.4 User's Manual中,此选项称为-isystem-prefix。该选项已重命名为--system-header-prefix in r204775, 2.5 months after 3.4 release

所以你必须使用-isystem-prefix选项,但没有解释它是cc1选项,所以你必须像

一样使用它
clang -I ./nested -Xclang -isystem-prefix -Xclang legacyLib/ test.c

-Xclang用于将下一个选项传递给cc1。顺便说一句,我注意到如果legacyLib/test.c在同一目录中,则不会禁止警告。我不知道这是不是一个错误,但如果你不同意我的意见,请file a bug report。上一个命令使用以下目录结构

<working directory>
|- test.c, which has #include "legacyLib/header.h"
`- nested/
   `- legacyLib/
      `- header.h, which has warnings

为了将来参考,Clang 3.5支持--system-header-prefix,即以下命令有效(使用clang版本3.5.0(主干207361)检查)

clang -I ./nested --system-header-prefix legacyLib/ test.c