# Variables for generating the version. # Used in the application (config.h file and versioninfo.rc) # # Получаем полный временной штамп в UTC (пример: "2025-04-16 12:33:58 UTC") string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S UTC" UTC) string(TIMESTAMP VERSION_DOY "%j" UTC) # день в году (001..366) # Извлекаем компоненты даты и времени string(SUBSTRING "${BUILD_DATE}" 0 4 YEAR_STR) string(SUBSTRING "${BUILD_DATE}" 2 2 VERSION_YY) string(SUBSTRING "${BUILD_DATE}" 5 2 VERSION_MM) string(SUBSTRING "${BUILD_DATE}" 8 2 VERSION_DD) string(SUBSTRING "${BUILD_DATE}" 11 2 VERSION_HH) string(SUBSTRING "${BUILD_DATE}" 14 2 VERSION_MIN) string(SUBSTRING "${BUILD_DATE}" 17 2 VERSION_SS) # Убираем ведущие нули путём преобразования в числа math(EXPR VERSION_YY_NOZERO "${VERSION_YY}") math(EXPR VERSION_MM_NOZERO "${VERSION_MM}") math(EXPR VERSION_DD_NOZERO "${VERSION_DD}") math(EXPR VERSION_HH_NOZERO "${VERSION_HH}") math(EXPR VERSION_MIN_NOZERO "${VERSION_MIN}") math(EXPR VERSION_SS_NOZERO "${VERSION_SS}") math(EXPR VERSION_DOY_NOZERO "${VERSION_DOY}") if (VERSION_FULLDATE) # Полная дата: YY.MM.DD.NNN # Считаем количество минут с начала суток math(EXPR VERSION_NNN "${VERSION_HH_NOZERO} * 60 + ${VERSION_MIN_NOZERO}" ) set(PROJECT_VERSION_MAJOR ${VERSION_YY_NOZERO}) set(PROJECT_VERSION_MINOR ${VERSION_MM_NOZERO}) set(PROJECT_VERSION_PATCH ${VERSION_DD_NOZERO}) set(BUILD_NUM ${VERSION_NNN}) else() # Версия от MAJOR, MINOR + YY + день года # MAJOR и MINOR должны быть заданы ранее через `project(... VERSION ...)` set(PROJECT_VERSION_PATCH ${VERSION_YY_NOZERO}) set(BUILD_NUM ${VERSION_DOY_NOZERO}) endif() set(ORIGINAL_FILE_NAME ${RUNTIME_OUTPUT_NAME}) message(STATUS "Project '${PROJECT_NAME}' version: ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}.${BUILD_NUM}")