【发布时间】: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 预处理器无法实现的标记。