在C ++中使用环境变量作为编译时常量

时间:2014-04-03 02:21:57

标签: c++ visual-studio environment-variables

作为构建过程的一部分,我需要获取由批处理脚本定义的环境变量,并在编译时将其用作代码中的常量。

例如,假设我已经定义了一个名为BUILD_VERSION的环境变量并将其设置为1.0.0,在编译时我希望将1.0.0添加到我的代码中。 EG:

批处理文件:

set BUILD_VERSION = 1.0.0
; call vs compiler

C ++文件:

const std::string build_version = BUILD_VERSION // Which will result in "1.0.0".

我将如何做到这一点?

3 个答案:

答案 0 :(得分:5)

最后,我遵循txchelp建议并在命令行中添加了/D标记 - >项目属性的其他选项部分,用于将环境变量声明为预处理器定义。

它看起来像这样:

enter image description here

然后在启动构建的批处理脚本中:

set SVN_BUILD_VERSION=1.0.0

最后将其作为源代码中的字符串提取出来:

#define STRINGIZER(arg)     #arg
#define STR_VALUE(arg)      STRINGIZER(arg)
#define BUILD_VERSION_STRING STR_VALUE(BUILD_VERSION)

// ...

const std::string version = BUILD_VERSION_STRING; // Results in "1.0.0".

答案 1 :(得分:0)

您可以使用预建步骤(我假设您在Visual Studio上)将运行脚本,该脚本将获取此环境变量值,解析C ++源文件并更改值 “1.0.0.0”到“1.0.0.1”。

这种替换可以通过awk方便地完成。

答案 2 :(得分:0)

VERSION_INFO resource可能是个不错的选择。

可以通过右键单击可执行文件并检查其属性来检查嵌入的版本信息。

要在命令行执行此操作:

  • 将批处理文件的输出重定向到定义资源的[.rc]文件。

  • 使用rc.exe编译资源。

  • 通过简单地将结果传递给链接器来嵌入生成的.res文件。

在Visual Studio中,它可能会更复杂。