如何重新映射c头文件

时间:2013-06-11 15:49:04

标签: c remap

我对以下事情感到不安。

我有一个文件foo.c

包括foo.h并做一些事情。

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

可以使用的一件事是将my_foo.h包含在foo.h中。还有其他建议吗? 不,我不能包含在foo.c my_foo.h

提前谢谢大家

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

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

但也许您可以使用以下内容创建foo.h

#include "my_foo.h"

答案 2 :(得分:1)

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

因此,如果您可以控制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中

/* 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
顺便说一句,这不是构建Makefile的好方法,它只是演示了可用于在两个foo.h文件之间切换的编译器命令。