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

dan*_*dee 5 xcode clang

Clang的文档提到了一个名为的标志的可用性--system-header-prefix.

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

我想使用此标志而不是使用-isystem而不是包含那些标头-I.

背景

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

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

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

clang: error: unsupported option '--system-header-prefix=legacyLib/'
Run Code Online (Sandbox Code Playgroud)

我使用的是版本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
Run Code Online (Sandbox Code Playgroud)

Vol*_*sai 10

您指的是Clang 3.5文档.在Clang 3.4用户手册中调用此选项-isystem-prefix.该选项--system-header-prefix 在发布3.4版本后2.5个月内重新命名为r204775.

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

clang -I ./nested -Xclang -isystem-prefix -Xclang legacyLib/ test.c
Run Code Online (Sandbox Code Playgroud)

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

<working directory>
|- test.c, which has #include "legacyLib/header.h"
`- nested/
   `- legacyLib/
      `- header.h, which has warnings
Run Code Online (Sandbox Code Playgroud)

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

clang -I ./nested --system-header-prefix legacyLib/ test.c
Run Code Online (Sandbox Code Playgroud)