C Macro - Dynamic #include

I'm trying to figure out how to build a variable string for the #include statement using GCC.

The idea is that for each source module I have written, I want to include as a header, a dynamically generated C source, that was created earlier in the build process.

Generating this file is not an issue. Including it, unfortunately, is.

What I have so far is (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

Ideally, this would be used like so (main.c):

//main.c

# include "identities.h"

int main() {return 0;}

Which would be expanded in a single pass by the preprocessor before compilation to yield:

//main.c (preprocessed)

# include "main.c.iden"

int main() {return 0;}

The two levels of indirection I'm using (PASTER and EVALUATOR) are a result of this post.

Unfortunately, this is not working and I am left with the error:

obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or 

I think the problem is that the include statement is missing quotes.. Any ideas?

9
задан Community 23 May 2017 в 12:33
поделиться