我对以下事情感到不安。
我有一个文件foo.c
包括foo.h并做一些事情。
棘手的是这个。我想将foo.h重新映射到my_foo.h。因此,当编译器看到foo.h时,它应该转到my_foo.h。
可以使用的一件事是将my_foo.h包含在foo.h中。还有其他建议吗? 不,我不能包含在foo.c my_foo.h
中提前谢谢大家
答案 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文件之间切换的编译器命令。