3

我正在为以下问题困扰自己。

我有一个文件 foo.c

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

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

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

谢谢大家

4

3 回答 3

7

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

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

于 2013-06-11T15:55:37.870 回答
2

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

但也许你可以创建一个foo.h具有以下内容的:

#include "my_foo.h"
于 2013-06-11T15:59:53.107 回答
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 文件之间切换的编译器命令。

于 2013-06-11T17:08:26.587 回答