如何使用C预处理器替换环境变量

时间:2010-02-19 21:46:48

标签: c++ environment-variables c-preprocessor substitution

在下面的代码中,我希望在编译时从环境变量THE_VERSION_STRING的值中获取MY_VERSION的值

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

如果我输入:

export MY_VERSION="2010.4"

pluginRequires将设置为“2010.4”,即使MY_VERSION在运行时设置为其他内容。

更新:(2月21日)感谢大家的帮助。有用。 由于我使用Rake作为构建系统,我的每个CFLAGS都是一个ruby变量。值也需要以引号结束。因此,对我来说,gcc命令行需要如下所示:

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

这意味着这是我的Rakefile:

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

2 个答案:

答案 0 :(得分:13)

如果我没记错的话,你可以在编译时使用命令行参数-D和gcc到#define的值。

即:

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

答案 1 :(得分:0)

  

在下面的代码中,我希望在编译时从环境变量MY_VERSION的值中获取THE_VERSION_STRING的值

不,你不能这样做。提取环境变量的唯一方法是在运行时使用getenv()函数。您需要显式提取值并将其复制到pluginRequires

如果你想要编译时常量的效果,那么你必须在Seth建议的编译器命令行上指定定义。