我发现了一个不寻常的C makefile设置,它依赖于GCC的弃用功能,似乎没有现代替代品。
该系统需要在包含它们之前预处理或“烹饪”本地头文件。 makefile处理这个并将熟版本放在本地'./prepared/'目录中。头文件使用正常名称(例如#include "name.h"
)正常包含在c中。系统只需要'./prepared/'在'。'之前在GCC头文件搜索路径中出现。
Gcc曾经提供-I-选项来删除默认的'。'并允许在其之前添加标题搜索路径条目,但不推荐使用此选项。
来自gcc docs:
GCC首先查找#include“file”请求的标头 包含当前文件的目录,然后在目录中 由-iquote选项指定,然后在相同的位置 找了一个尖括号请求的标题。例如, 如果/usr/include/sys/stat.h包含#include“types.h”,GCC看起来 对于types.h,首先在/ usr / include / sys中,然后在其通常的搜索路径中。
是否无法再在gcc中正确控制C头搜索路径?或者还有另一种合理的前进方向吗?我不想使用可能会消失的弃用功能。现在我很遗憾地过滤了gcc已弃用的功能警告消息以隐藏它们。我没有创建构建环境,以打破'烹饪'的方式解决问题是不受欢迎的。
答案 0 :(得分:0)
据我所知,GCC没有提供其他手段比你&#39的一个; VE描述,以避免具有每个源文件' S目录首先在编译该文件时使用的包含搜索路径
最好的解决方案可能是修复标题并构建系统以摆脱标题烹饪。这样的计划非常不寻常 - 几乎所有其他人都没有。
如果您必须继续依赖标题烹饪,那么您可能应该将原始标题移动到不在包含搜索路径中的目录。例如,创建一个" include"主源目录的子目录,并将它们放在那里。
编辑添加:
另一种方法是从引用的包含样式切换到包含角度的包含样式,并依赖-I
选项来设置所需的内部包含目录。