CC -I vs -isystem 命令行参数差异和特定行为

CC -I vs -isystem command line argument differences and specific behavior

我已经看过 this 个问题。
许多编译器和编译器工具链支持 -I <dir> 和 -isystem <dir> 命令行参数。我知道他们分别将目录添加到搜索路径和系统搜索路径,并且最后搜索系统目录,并且 -isystem 可以帮助您覆盖默认系统库。
我也知道他们得到了 GCC 的特殊待遇 'to fix buggy system headers' 但 GCC 在这方面具体做了什么 'special treatment'?
另外,我不清楚编译器是否只查找指定目录而不查找更深的目录,或者是否在某种程度上递归搜索这些目录。

如果我需要访问 /path/to/libpath/to/lib/aBitFurther 中的资源,我只需要 -I /path/to/lib 吗?

主要区别在于 GCC 抑制了系统 header 中的警告。在某些情况下,这使那些 header 能够使用某些 non-standard GNU 扩展。

您提到的错误系统 header 的处理是一个覆盖目录树,其中包含使用 fixincludes 工具预处理的 header 文件,但这不是您在 GNU/Linux 系统,因为它极其混乱并导致很多问题(例如隐藏官方系统的后续更新 headers)。我希望它仅在这一点上具有历史意义(尽管 GCC 在其构建过程中仍在准备这些 header)。