如何使用C预处理,使包含用可变
问题描述:
在下面的代码的环境,我想的THE_VERSION_STRING
值从环境变量MY_VERSION
的值在编译时采取如何使用C预处理,使包含用可变
namespace myPluginStrings {
const char* pluginVendor = "me";
const char* pluginRequires = THE_VERSION_STRING;
};
所以,如果我键入:
export MY_VERSION="2010.4"
pluginRequires
将在“2010.4”进行设置,即使MY_VERSION
被设置为在运行时别的东西。
更新:(feb 21)感谢您的帮助。有用。 由于我使用Rake作为构建系统,因此我的每个CFLAGS都是一个ruby变量。这些值也需要以引号结尾。因此,对于我的gcc命令行必须是这样的:
gcc file.c -o file -D"PLUGIN_VERSION=\"6.5\""
这意味着这是我的Rakefile:
"-D\"PLUGIN_VERSION=\\\"#{ENV['MY_VERSION']}\\\"\""
答
如果我没有记错,您可以使用命令行参数-D
用gcc到#define
编译时的值。
即:
$ gcc file.c -o file -D"THE_VERSION_STRING=${THE_VERSION_STRING}"
答
在下面的代码,我想THE_VERSION_STRING的值从环境变量MY_VERSION的值在编译时采取
不,你不能这样做。提取环境变量的唯一方法是在运行时使用getenv()
函数。您需要明确提取该值并将其复制到pluginRequires
。
如果您想要编译时常量的效果,那么您必须在编译器命令行中指定定义为Seth。
这不是预处理器会做的事情。这是你的构建系统必须要做的事情。 – GManNickG 2010-02-19 21:49:01