我在尝试使用GCC构建可变字符串来生成#include语句。
我的思路是,对于每个编写的源模块,我想要包含一个在之前的构建过程中动态生成的C源文件作为头文件。
生成这个文件没有问题。但是,包含它却很麻烦。
目前我已经有了如下代码(identities.h):
// identities.h
# define PASTER2(str) #str
# define PASTER(str) PASTER2(str ## .iden)
# define EVALUATOR(x) PASTER(x)
# define IDENTITIES_FILE EVALUATOR(__FILE__)
# include IDENTITIES_FILE
理想情况下,应该这样使用(main.c):
//main.c
# include "identities.h"
int main() {return 0;}
这将在编译之前由预处理器一次性扩展,以产生:
//main.c (preprocessed)
# include "main.c.iden"
int main() {return 0;}
我使用的两级间接(PASTER和EVALUATOR)是这篇帖子的结果。
不幸的是,这不起作用,我得到了错误:
obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>
我认为问题在于 include 语句缺少引号.. 有任何想法吗?