使用make将include指令替换为不同的文件名

时间:2017-06-23 21:06:47

标签: c makefile

我有一个头文件sample_A.h,它有一个#include "sample_B.h"格式的include语句。我还有另一个头文件sample_C.h。我希望头文件sample_A.h包含sample_C.h而不是sample_B.h,但在任何情况下我都不能编辑用于构建项目的Makefile之外的任何内容。通过单独编辑Makefile,将sample_A.h“重定向”为sample_C.h而不是sample_B.h的最佳方法是什么?假设sample_C.hsample_B.h都允许sample_A.h编译。

编辑:我正在开发一个拥有庞大构建结构的项目。有些文件已过时,但由于上层管理订单,在未来的会议开始之前不应混淆这些文件。与此同时,我试图找出一种方法来绕过这些过时的文件(及其过时的包含指令)而不触及文件本身。我正在使用gcc编译器。

1 个答案:

答案 0 :(得分:0)

  

我希望标题文件sample_A.h包含sample_C.h而不是sample_B.h,但在任何情况下都不能编辑用于构建项目的Makefile之外的任何内容。

原则上,编译器很乐意选择如何解释#include指令( ie "sample_B.h")中提供的文件标识符,但实际上,每个编译器都是如此您可能会遇到将其解释为文件名或路径。因此,如果您有一个(唯一)简单名称为sample_C.h的文件,并且您没有允许为其提供其他名称的方法(例如,通过复制或创建符号链接),则不太可能有任何方式可以选择该文件来满足#include "sample_B.h"指令。

但是,如果两个标题具有相同的简单名称但位于不同的目录中,例如src/sample_B.hcustom/sample_B.h,通常可能影响通过影响包含文件搜索路径的编译器选项选择哪个。 Unix C编译器的传统选项是-I