我正在为以下问题困扰自己。
我有一个文件 foo.c
其中包括 foo.h 并做了一些事情。
棘手的是这个。我想将 foo.h 重新映射到 my_foo.h。因此,当编译器看到 foo.h 时,它应该转到 my_foo.h。
可行的一件事是将 my_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
/* 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 文件之间切换的编译器命令。