在VS項目中通過GIT生成版本號作為編譯版本號
首先獲取git版本信息
:: git rev-parse --abbrev-ref HEAD 獲取當前分支名稱
for /f %%i in ('git rev-parse --abbrev-ref HEAD') do (set BRANCH=%%i)
:: git rev-list HEAD -n 1 獲取當前分支最近一次提交的hash值
for /f %%i in ('git rev-list HEAD -n 1') do (set COMMITID=%%i)
::git rev-list HEAD --count 獲取當前分支的提交次數
for /f %%i in ('git rev-list HEAD --count') do (set LOCALVER=%%i)
::將獲取到的版本信息按照提交次數-分支首字母-hash值的前7個字符拼接起來
set VER=%LOCALVER%-%BRANCH:~0,1%-%COMMITID:~0,7%
用獲取的到的版本信息生成頭文件
set LIB_VER=1.0.0.1
set COMPANYNAME=zhaoliang
set temp=#ifndef _PROJECT_VERSION_H_
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define _PROJECT_VERSION_H_
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_SYSTEM_FILE
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_SYSTEM_FILE "%LIB_VER%,%LOCALVER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_SYSTEM_PRODUCT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_SYSTEM_PRODUCT "%LIB_VER%,%LOCALVER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_DISPLAY_FILE
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_DISPLAY_FILE "%LIB_VER%,%VER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_DISPLAY_PRODUCT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_DISPLAY_PRODUCT "%LIB_VER%,%VER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_COMPANY_NAME
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_COMPANY_NAME "%COMPANYNAME%"
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_PRODUCT_NAME
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_PRODUCT_NAME "%COMPANYNAME%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_LEGAL_COPYRIGHT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_LEGAL_COPYRIGHT "Copyright (C) 2007-2021 %COMPANYNAME% CO.,Ltd."
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
添加版本信息
1.右鍵項目,選擇添加->資源

2.選擇Version 然后新建

3.此時會在項目中出現一個資源文件

4.右鍵資源文件,選擇查看代碼

5.導入頭文件,並將幾個宏放入版本信息

注意項目和version.h的路徑不一致,我使用相對路徑導入的

6.構建生成后會自動加入版本信息

下面的是完整的腳本
setlocal enabledelayedexpansion
set SCRIPT_DIR=%cd%\
set VERSION_HPP_FILE=%SCRIPT_DIR%\version.h
set VERSION_FILE=%SCRIPT_DIR%\version
del /Q %VERSION_HPP_FILE%
del /Q %VERSION_FILE%
::git rev-parse --abbrev-ref HEAD獲取當前分支名稱
for /f %%i in ('git rev-parse --abbrev-ref HEAD') do (set BRANCH=%%i)
::git rev-list HEAD -n 1 獲取當前分支最近一次提交的hash值
for /f %%i in ('git rev-list HEAD -n 1') do (set COMMITID=%%i)
::git rev-list HEAD --count 獲取當前分支的提交次數
for /f %%i in ('git rev-list HEAD --count') do (set LOCALVER=%%i)
::將獲取到的版本信息按照提交次數-分支首字母-hash值的前7個字符拼接起來
set VER=%LOCALVER%-%BRANCH:~0,1%-%COMMITID:~0,7%
set LIB_VER=1.0.0.1
set COMPANYNAME=zhaoliang
set temp=#ifndef _PROJECT_VERSION_H_
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define _PROJECT_VERSION_H_
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_SYSTEM_FILE
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_SYSTEM_FILE "%LIB_VER%,%LOCALVER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_SYSTEM_PRODUCT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_SYSTEM_PRODUCT "%LIB_VER%,%LOCALVER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_DISPLAY_FILE
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_DISPLAY_FILE "%LIB_VER%,%VER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_VERSION_DISPLAY_PRODUCT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_VERSION_DISPLAY_PRODUCT "%LIB_VER%,%VER%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_COMPANY_NAME
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_COMPANY_NAME "%COMPANYNAME%"
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_PRODUCT_NAME
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_PRODUCT_NAME "%COMPANYNAME%"
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#ifndef PROJECT_OWNER_LEGAL_COPYRIGHT
echo !temp!>>%VERSION_HPP_FILE%
set temp=#define PROJECT_OWNER_LEGAL_COPYRIGHT "Copyright (C) 2007-2021 %COMPANYNAME% CO.,Ltd."
echo !temp!>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
echo.>>%VERSION_HPP_FILE%
set temp=#endif
echo !temp!>>%VERSION_HPP_FILE%
