作为构建过程的一部分,我需要获取由批处理脚本定义的环境变量,并在编译时将其用作代码中的常量。
例如,假设我已经定义了一个名为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".
我将如何做到这一点?
答案 0 :(得分:5)
最后,我遵循txchelp建议并在命令行中添加了/D
标记 - >项目属性的其他选项部分,用于将环境变量声明为预处理器定义。
它看起来像这样:
然后在启动构建的批处理脚本中:
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中,它可能会更复杂。