VS2015无需CMake与bash如何直接在头文件返回Git提交哈希
VS2015 C++ 环境注入Git Commit Hash实现方案
VS2015没有内置直接把Git哈希传入C++代码的一键功能,但不需要配置CMake、不需要额外搭建bash环境,用VS原生的生成事件能力就能实现,配置流程比CMake方案简单很多。
轻量实现步骤
- 配置预生成事件
右键项目打开「属性」面板,依次找到「配置属性」->「生成事件」->「预生成事件」,在「命令行」输入框填入以下命令:
for /f "delims=" %%i in ('git rev-parse --short HEAD') do set GIT_HASH_VAL=%%i echo #pragma once > "$(ProjectDir)git_commit_hash.h" echo #define GIT_HASH "%GIT_HASH_VAL%" >> "$(ProjectDir)git_commit_hash.h"
这个命令基于Windows原生cmd环境运行,只要本机安装Git时已经把git.exe加入系统PATH就能正常执行,每次编译前会自动在项目根目录生成git_commit_hash.h头文件,头文件内的宏会直接写入当前代码最新的短Commit Hash。
- 代码中直接引用
在需要展示版本号的源码文件里引入自动生成的头文件即可直接使用哈希值,示例:
#include "git_commit_hash.h" #include <string> std::string get_build_version() { return std::string("Ver_") + GIT_HASH; }
关于你写的返回值函数的问题
你写的如下代码语法本身没有错误:
std::string functionname() { return "@value@"; }
但@value@是CMake configure_file 模块专属的占位符,只有走CMake的模板替换流程时,这个字符串才会被替换成实际传入的哈希值。如果不用CMake做配置替换,函数运行时会原样返回@value@字符串,完全拿不到真实的Git提交哈希。
补充注意事项
自动生成的
git_commit_hash.h属于编译期临时文件,记得把它加入.gitignore规则,不要提交到Git仓库,避免不同分支/不同提交点编译生成的文件产生无意义的冲突。如果不想生成额外头文件,也可以直接在预生成事件里拼出编译器/D参数,把哈希作为全局宏直接传给编译器,不过生成头文件的方式可读性更强,也不容易出现宏重定义问题。
内容的提问来源于stack exchange,提问作者CodeNoob
相关产品推荐
相关产品推荐

