먼 옛 날, CVS, Subversion 등에서 소스의 특정 태그를 커밋로그나 뭐 그런 걸로 수정해주는 경우가 있었는데, GIT에서는 그런 거 얄짤 없고, CMake에서도 정식 모듈로 주어지는 것이 없으니, 사부작사부작 만들어 보았다.
find_package(Git)
# GIT 태그를 읽어와 GIT_TAG_VERSION_RAW 이라는 변수로 넣는다.
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe HEAD --tags
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_TAG_VERSION_RAW
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
# GIT 브랜치를 읽어와 GIT_BRANCH 라는 변수로 넣는다.
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_BRANCH
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
# vX.X.X 형식을 x.x.x 형태로 변환한다.
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1.\\2.\\3" GIT_TAG_VERSION "${GIT_TAG_VERSION_RAW}")
# 프로젝트 버전 세팅
project(myProject VERSION ${GIT_TAG_VERSION})
# CPack용 버전 세팅
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
#set(CPACK_PACKAGE_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
댓글
댓글 쓰기