如何使用 C 预处理器用环境变量进行替换
在下面的代码中,我希望在编译时从环境变量 MY_VERSION
的值中获取 THE_VERSION_STRING
的值,
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']}\\\"\""
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']}\\\"\""
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果我没记错的话,您可以使用命令行参数
-D
使用 gcc 在编译时#define
一个值。IE:
If I recall correctly, you can use the command line parameter
-D
with gcc to#define
a value at compile time.i.e.:
不,你不能这样做。提取环境变量的唯一方法是在运行时使用 getenv() 函数。您需要显式提取该值并将其复制到
pluginRequires
。如果您想要编译时常量的效果,则必须在编译器命令行上将定义指定为 Seth建议。
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 topluginRequires
.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.