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
答案 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