2

我已经看到了这个问题。
许多编译器和编译器工具链支持 -I < dir > 和 -isystem < dir > 命令行参数。我确实知道他们分别将目录添加到搜索路径和系统搜索路径,并且系统目录最后被搜索,并且 -isystem 可以帮助您覆盖默认系统库。
我也知道他们得到了 GCC 的特殊待遇“修复有缺陷的系统头文件”,但是 GCC 在这种“特殊待遇”中具体做了什么?
另外,我不清楚编译器是否只在指定的目录中查找而没有更深入,或者是否在某种程度上递归搜索这些目录。

如果我需要访问资源/path/to/lib并且path/to/lib/aBitFurther我只需要-I /path/to/lib

4

1 回答 1

1

主要区别在于 GCC 抑制系统标头中的警告。在某些情况下,这使这些头文件能够使用某些非标准 GNU 扩展。

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

于 2017-07-20T17:19:38.070 回答