为什么我不能明确地"-I /usr/include"?



当通过-I显式包含时,gcc和clang似乎都会从包含目录列表中静默地丢弃/usr/include。为什么常见的编译器显然不允许包含系统的include-dir,有什么具体的原因吗?


背景:

假设您依赖于位于/usr/include中的头文件,同时通过CPATH环境变量从构建系统继承了一个包含同一头的不兼容版本的目录(实际上是将该目录从右侧附加到-I列表中(。

GCC会忽略-I/usr/include,因为默认情况下它是一个系统头目录,而使用-I会将其变成非系统头,从而导致混乱的行为,尤其是与语言标准不完全一致的系统头。(例如,GCC为系统标题提供了更多的自由度,并抑制了警告。(

如果使用-isystem /usr/include,则/usr/include将移动到搜索列表的前面。然而,您可能还必须移动其他默认搜索路径条目,以避免破坏太多内容。gcc -v将打印整个搜索路径。

最新更新