【问题标题】:GCC header search path deprecated不推荐使用 GCC 标头搜索路径
【发布时间】:2015-07-02 03:59:57
【问题描述】:

我发现了一个不寻常的 C makefile 设置,它依赖于似乎没有现代替代品的 GCC 已弃用功能。

此系统需要在包含本地头文件之前对其进行预处理或“烹饪”。 makefiles 会处理这个并将熟版本放在本地'./prepared/' 目录中。头文件使用它们的正常名称如#include "name.h" 正常包含在c 中。系统只需要 './prepared/' 出现在 GCC 头文件搜索路径中的 '.' 之前。

Gcc 曾经提供 -I- 选项来删除默认的 '.'并允许在其之前添加标题搜索路径条目,但不推荐使用此选项。

来自 gcc 文档:

GCC 查找以 #include "file" 开头的请求头 包含当前文件的目录,然后在目录中 由 -iquote 选项指定,然后在相同的地方它会 已寻找带有尖括号的标头。例如, 如果 /usr/include/sys/stat.h 包含#include“types.h”,GCC 看起来 对于 types.h,首先在 /usr/include/sys 中,然后在其通常的搜索路径中。

在 gcc 中没有办法正确控制 C 标头搜索路径了吗?还是有另一种明智的前进方式?我不想使用可能会消失的已弃用功能。现在我很遗憾地过滤 gcc 已弃用的功能警告消息以隐藏它们。构建环境不是我创建的,以打破“烹饪”的方式解决问题会不受欢迎。

【问题讨论】:

  • 这个 Makefile 听起来很糟糕。
  • 好吧,我认为打破烹饪并说如果你希望程序仍然工作或者只是忽略它就必须打破它最终会消失并留给你之后的可怜的程序员:)
  • 他们到底对系统头文件做了什么?这听起来完全没有必要。
  • 他们到底对系统头文件做了什么? -没有。他们正在烹饪程序自己的头文件;不是系统的。 IE。 #include "name.h" 而不是 #include 。大多数情况下,他们正在添加 c 预处理器无法实现的标记。

标签: c gcc


【解决方案1】:

据我所知,GCC 没有提供除您所描述的方法之外的其他方法,以避免在编译该文件时将每个源文件的目录放在包含搜索路径中。

最好的解决方案可能是修复头部并构建系统以摆脱头部烹饪。这样的计划很不寻常——几乎其他人都没有。

如果您必须继续依赖标头烹饪,那么您可能应该将原始标头移动到不在包含搜索路径中的目录。例如,在主源目录下创建一个“include”子目录,并将它们放在那里。

编辑添加: 另一种选择是从引用的包含样式切换到尖括号的包含样式,并依靠-I 选项来设置所需的内部包含目录。

【讨论】:

  • 从源中分离包含文件并不是很方便。短期而言:我正在更改 makefile 以将不需要烹制的源文件复制到准备好的目录中,与烹制的文件一起,并从那里进行主要编译。这样,熟文件在同一个目录中,并首先找到。这不是很令人满意,GCC 确实应该允许控制包含路径。这不是不合理的需要
  • GCC 确实提供了对包含文件搜索路径的控制。它只是弃用了您想要的特定旋钮。是的,实际上,你的愿望至少是一个非常不寻常的愿望,如果不是不合理的话。这绝不是“需要”。
猜你喜欢
  • 2013-03-14
  • 2011-03-26
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 2023-03-18
  • 2013-07-13
  • 2020-05-03
  • 2012-04-27
相关资源
最近更新 更多