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

发布于 2024-08-21 20:47:53 字数 710 浏览 6 评论 0原文

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

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

因此,如果我输入:

export MY_VERSION="2010.4"

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

更新:(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千纸鹤 2024-08-28 20:47:53

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

IE:

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

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}"
尸血腥色 2024-08-28 20:47:53

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

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

如果您想要编译时常量的效果,则必须在编译器命令行上将定义指定为 Seth建议。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文