如何重新映射c头文件

如何重新映射c头文件,c,remap,C,Remap,我为以下几点感到烦恼 我有一个foo.c文件 这包括foo.h和做一些事情 棘手的是这个。我想将foo.h重新映射到我的_foo.h。因此,当编译器看到foo.h时,它应该转到my_foo.h 一件可能有效的事情是将我的_foo.h加入到foo.h中。还有其他建议吗? 不,我不能包含在foo.c my_foo.h中 提前感谢大家在使用包含“foo.h”的目录之前,请更改包含路径以使用由您控制的目录 在您控制的目录中,创建一个名为“foo.h”的符号链接,该符号链接指向“my_foo.h”作为目标

我为以下几点感到烦恼

我有一个foo.c文件

这包括foo.h和做一些事情

棘手的是这个。我想将foo.h重新映射到我的_foo.h。因此,当编译器看到foo.h时,它应该转到my_foo.h

一件可能有效的事情是将我的_foo.h加入到foo.h中。还有其他建议吗? 不,我不能包含在foo.c my_foo.h中


提前感谢大家

在使用包含“foo.h”的目录之前,请更改包含路径以使用由您控制的目录


在您控制的目录中,创建一个名为“foo.h”的符号链接,该符号链接指向“my_foo.h”作为目标

根据您使用的系统,您可能没有符号链接

但也许您可以创建一个包含以下内容的
foo.h

#include "my_foo.h"

多有趣的问题啊。我很想知道你在用它做什么

因此,如果您可以控制
foo.h
,下面是Linux内核中在内核代码和用户代码之间共享头文件时使用的技巧的一个变体

/* File: foo.h */
#ifdef USE_MY_FOO_H
    #include <my_foo.h>
#else
    #define OVERRIDABLE_FOO_MACRO do { stuff() } while(0)

    int overridable_foo_func();
#endif

int not_overridable_foo_func();

顺便说一句,这并不是一个很好的生成Makefile的方法,它只是演示了可以用来在两个foo.h文件之间切换的编译器命令。

为什么不重命名
my_foo.h
,或者创建一个符号链接?你到底想做什么?如果可能的话,我会很惊讶的。预处理器(处理此问题)非常有限。这是一个包含“foo.h”还是一个包含(quotes或brakets)?它是一个包含“foo.h”
/* File: Makefile */
default: foo.c foo.h
    $(CC) foo.c -o foo

use_my_foo_h: foo.c foo.h my_foo.h
    $(CC) -DUSE_MY_FOO_H foo.c -o foo