GenVersion.cmake 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #获取tag上的版本号
  2. macro(get_version _major _minor _patch)
  3. find_package(Git QUIET) # 查找Git,QUIET静默方式不报错
  4. set(RET -1)
  5. if (GIT_FOUND)
  6. execute_process( # 执行一个子进程
  7. COMMAND ${GIT_EXECUTABLE} rev-list --tags --max-count=1
  8. RESULT_VARIABLE RET # 返回值存入变量
  9. OUTPUT_VARIABLE _hash # 输出字符串存入变量
  10. OUTPUT_STRIP_TRAILING_WHITESPACE # 删除字符串尾的换行符
  11. WORKING_DIRECTORY # 执行路径
  12. ${CMAKE_CURRENT_SOURCE_DIR}
  13. )
  14. if (RET EQUAL 0)
  15. execute_process( # 执行一个子进程
  16. COMMAND ${GIT_EXECUTABLE} describe --tags ${_hash}
  17. RESULT_VARIABLE RET # 返回值存入变量
  18. OUTPUT_VARIABLE _version # 输出字符串存入变量
  19. OUTPUT_STRIP_TRAILING_WHITESPACE # 删除字符串尾的换行符
  20. WORKING_DIRECTORY # 执行路径
  21. ${CMAKE_CURRENT_SOURCE_DIR}
  22. )
  23. endif ()
  24. endif ()
  25. if (RET EQUAL 0)
  26. # message("---------------${_version}-------", ${RET})
  27. string(SUBSTRING "${_version}" 1 -1 _version)
  28. string(REPLACE "." ";" _version_list ${_version})
  29. list(LENGTH _version_list version_length)
  30. if (version_length EQUAL 3)
  31. list(GET _version_list 0 major)
  32. if (major MATCHES "^[1-9]\\d*|0$")
  33. else ()
  34. set(RET -1)
  35. endif ()
  36. list(GET _version_list 1 minor)
  37. if (minor MATCHES "^[1-9]\\d*|0$")
  38. else ()
  39. set(RET -1)
  40. endif ()
  41. list(GET _version_list 2 patch)
  42. if (patch MATCHES "^[1-9]\\d*|0$")
  43. else ()
  44. set(RET -1)
  45. endif ()
  46. if (RET EQUAL 0)
  47. set(${_major} ${major})
  48. set(${_minor} ${minor})
  49. set(${_patch} ${patch})
  50. endif ()
  51. endif ()
  52. endif ()
  53. endmacro()
  54. macro(get_timestamp _commit_time _build_time _version_time)
  55. find_package(Git QUIET) # 查找Git,QUIET静默方式不报错
  56. set(RET 0)
  57. if (GIT_FOUND)
  58. execute_process( # 执行一个子进程
  59. # COMMAND ${GIT_EXECUTABLE} log -1 --format=%cd --date=format:%Y%m%d%H%M%S
  60. COMMAND ${GIT_EXECUTABLE} log -n 1 --pretty=format:%ad --date=iso # 命令
  61. RESULT_VARIABLE RET # 返回值存入变量
  62. OUTPUT_VARIABLE commit_time # 输出字符串存入变量
  63. OUTPUT_STRIP_TRAILING_WHITESPACE # 删除字符串尾的换行符
  64. WORKING_DIRECTORY # 执行路径
  65. ${CMAKE_CURRENT_SOURCE_DIR}
  66. )
  67. endif ()
  68. string(TIMESTAMP ${_build_time} "%Y%m%d%H%M%S") # 获取生成时间
  69. if (NOT RET EQUAL 0)
  70. message(AUTHOR_WARNING "can't find .git, use build date instead of commit date!!!")
  71. set(${_version_time} ${${_build_time}})
  72. else ()
  73. string(SUBSTRING ${commit_time} 0 4 year)
  74. string(SUBSTRING ${commit_time} 5 2 month)
  75. string(SUBSTRING ${commit_time} 8 2 day)
  76. string(SUBSTRING ${commit_time} 11 2 hour)
  77. string(SUBSTRING ${commit_time} 14 2 minute)
  78. string(SUBSTRING ${commit_time} 17 2 second)
  79. set(${_version_time} ${year}${month}${day}${hour}${minute}${second})
  80. set(${_commit_time} ${year}${month}${day}${hour}${minute}${second})
  81. endif ()
  82. endmacro()
  83. # get git hash
  84. macro(get_git_hash _git_hash) # 宏的开始
  85. find_package(Git QUIET) # 查找Git,QUIET静默方式不报错
  86. if (GIT_FOUND)
  87. execute_process( # 执行一个子进程
  88. COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h # 命令
  89. OUTPUT_VARIABLE ${_git_hash} # 输出字符串存入变量
  90. OUTPUT_STRIP_TRAILING_WHITESPACE # 删除字符串尾的换行符
  91. ERROR_QUIET # 对执行错误静默
  92. WORKING_DIRECTORY # 执行路径
  93. ${CMAKE_CURRENT_SOURCE_DIR}
  94. )
  95. endif ()
  96. endmacro()
  97. # get git branch
  98. macro(get_git_branch _git_branch) # 宏的开始
  99. find_package(Git QUIET) # 查找Git,QUIET静默方式不报错
  100. if (GIT_FOUND)
  101. execute_process( # 执行一个子进程
  102. COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD
  103. OUTPUT_VARIABLE ${_git_branch} # 输出字符串存入变量
  104. OUTPUT_STRIP_TRAILING_WHITESPACE # 删除字符串尾的换行符
  105. ERROR_QUIET # 对执行错误静默
  106. WORKING_DIRECTORY # 执行路径
  107. ${CMAKE_CURRENT_SOURCE_DIR}
  108. )
  109. endif ()
  110. endmacro()