项目中使用git进行代码的版本控制,每次发版都会生成新的tag。
而可执行文件往往都喜欢使用-V或者–version的命令行参数来获取当前可执行文件的版本,这可以在代码中通过宏定义来实现,如下:
#define AUDIT_VERSION "1.1.1"
cout << AUDIT_VERSION << endl;
如果像上面的代码一样,直接在代码中写死,每次打tag时都要去改代码,为了避免对代码的修改,可以通过Cmakelists.txt文件来实现。如下:
EXECUTE_PROCESS(COMMAND git describe --tags
TIMEOUT 5
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
MESSAGE(STATUS "building from git tag ${GIT_VERSION}")
add_definitions(-DBUILD_VERSION=\"${GIT_VERSION}\")
EXECUTE_PROCESS表示执行git命令来获取当前的tag号,并且赋值给变量GIT_VERSION,
MESSAGE表示将变量输出,在cmake的时候可以看到对应的输出,如下:
-- building from git tag 1.1.1
-- Configuring done
-- Generating done
add_definitions表示添加一个宏名BUILD_VERSION并且宏体为GIT_VERSION变量的值,此后便可以在代码中直接使用BUILD_VERSION宏,如下 :
cout << BUILD_VERSION << endl;