How do I use the C preprocessor to make a substitution with an environment variable

Julian Mann picture Julian Mann · Feb 19, 2010 · Viewed 9.5k times · Source

In the code below, I would like the value of THE_VERSION_STRING to be taken from the value of the environment variable MY_VERSION at compile time

namespace myPluginStrings {
const  char* pluginVendor = "me";
const  char* pluginRequires =  THE_VERSION_STRING;
};

So that if I type:

export MY_VERSION="2010.4"

pluginRequires will be set at "2010.4", even if MY_VERSION is set to something else at run time.

UPDATE: (feb 21) Thanks for your help everyone. It works. As I'm using Rake as a build system, each of my CFLAGS is a ruby variable. Also the values need to end up in quotes. Therefore the gcc command line for me needs to look like this:

gcc file.c -o file -D"PLUGIN_VERSION=\"6.5\"" 

Which means this is in my Rakefile:

"-D\"PLUGIN_VERSION=\\\"#{ENV['MY_VERSION']}\\\"\""

Answer

Seth picture Seth · Feb 19, 2010

If I recall correctly, you can use the command line parameter -D with gcc to #define a value at compile time.

i.e.:

$ gcc file.c -o file -D"THE_VERSION_STRING=${THE_VERSION_STRING}"