I'm facing a tricky problem. I'd like to forge a C source file content according to compiler command line. For example(using VC):
If I use command line
cl -c -E -Dfoo=rice test.c
I wish to get actual C content (after preprocessing):
char *s = "rice";
If I use command line
cl -c -E -Dfoo=ball test.c
I wish to get actual C source file content:
char *s = "ball";
Now finding a solution...
FIRST TRY:
// test.c
#define STRNAME(n) #n
char *s = STRNAME(foo);
-- No luck. No matter what foo is defined to be on command line, I always get
char *s = "foo"; // Oh no!
SECOND TRY (closest I can image, but still verbose):
// test.c
#define STRNAME(n) #n
char *s = foo;
This time, I have to change my command line verbosely:
cl -c -E -Dfoo=STRNAME(rice) test.c
Now I get
char *s = "rice";
Is there a way to help me out of this verbosity?
BY the way: I really do not like to introduce quotes into command arguments (make them become part of argv[x]
, because you will not be able to write such command line reliably and portably on Windows CMD and Linux Bash -- I think.