How do I use the C preprocessor to make a substitution with an environment variable
-
21-09-2019 - |
Question
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']}\\\"\""
Solution
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}"
OTHER TIPS
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
No, you can't do it like this. The only way to extract environment variables is at runtime with the getenv()
function. You will need to explicitly extract the value and copy it to pluginRequires
.
If you want the effect of a compile-time constant, then you'll have to specify the definition on the compiler commandline as Seth suggests.