Add version

This commit is contained in:
sd
2025-11-24 13:47:23 +03:00
parent 25eeb1d78c
commit 418ec5b3af
4 changed files with 115 additions and 3 deletions

View File

@@ -17,6 +17,51 @@ else()
add_compile_definitions(JL_CONFIG_USE_FILE) add_compile_definitions(JL_CONFIG_USE_FILE)
endif() endif()
# Генерация версии из git
execute_process(
COMMAND git describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_TAG)
set(GIT_TAG "none")
endif()
execute_process(
COMMAND git branch --show-current
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND git show -s --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Получаем дату и время сборки
string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S" UTC)
# Формируем короткую версию (без хеша и даты)
if(GIT_BRANCH STREQUAL "main")
set(VERSION_SHORT "${GIT_TAG}")
set(VERSION_STRING "${GIT_TAG} ${GIT_HASH} (${BUILD_DATE})")
else()
set(VERSION_SHORT "${GIT_TAG}-${GIT_BRANCH}")
set(VERSION_STRING "${GIT_TAG}-${GIT_BRANCH} ${GIT_HASH} (${BUILD_DATE})")
endif()
configure_file(
${CMAKE_SOURCE_DIR}/inc/jlv135_cli/version.h.in
${CMAKE_BINARY_DIR}/inc/jlv135_cli/version.h
@ONLY
)
# Создание исполняемого файла # Создание исполняемого файла
add_executable(${PROJECT_NAME} add_executable(${PROJECT_NAME}
src/jl_modbus/jl_modbus_config.c src/jl_modbus/jl_modbus_config.c
@@ -36,8 +81,9 @@ add_executable(${PROJECT_NAME}
target_link_libraries(${CMAKE_PROJECT_NAME} pthread) target_link_libraries(${CMAKE_PROJECT_NAME} pthread)
# Добавление каталогов для поиска заголовков # Добавление каталогов для поиска заголовков
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
inc) inc
${CMAKE_BINARY_DIR}/inc)
if (BUILD_FOR_JLV135) if (BUILD_FOR_JLV135)
# Опция strip # Опция strip

44
cmake/version.cmake Normal file
View File

@@ -0,0 +1,44 @@
# Скрипт для генерации версии на основе git
# Получаем ближайший тег
execute_process(
COMMAND git describe --tags --abbrev=0
WORKING_DIRECTORY ${SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_TAG)
set(GIT_TAG "none")
endif()
# Получаем текущую ветку
execute_process(
COMMAND git branch --show-current
WORKING_DIRECTORY ${SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Получаем короткий хеш коммита
execute_process(
COMMAND git show -s --format=%h
WORKING_DIRECTORY ${SOURCE_DIR}
OUTPUT_VARIABLE GIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Формируем строку версии
if(GIT_BRANCH STREQUAL "main")
set(VERSION_STRING "${GIT_TAG} ${GIT_HASH}")
else()
set(VERSION_STRING "${GIT_TAG}-${GIT_BRANCH} ${GIT_HASH}")
endif()
# Генерируем заголовочный файл
configure_file(
${SOURCE_DIR}/inc/jlv135_cli/version.h.in
${BINARY_DIR}/inc/jlv135_cli/version.h
@ONLY
)

View File

@@ -0,0 +1,7 @@
#ifndef JLV135_VERSION_H
#define JLV135_VERSION_H
#define JLV135_VERSION "@VERSION_STRING@"
#define JLV135_VERSION_SHORT "@VERSION_SHORT@"
#endif // JLV135_VERSION_H

View File

@@ -1,4 +1,5 @@
#include <jlv135_cli/jl_block.h> #include <jlv135_cli/jl_block.h>
#include <jlv135_cli/version.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@@ -12,7 +13,9 @@ print_help(const char *program_name)
printf("Usage: %s [COMMAND] [BLOCK] [PARAMETERS...]\n\n", program_name); printf("Usage: %s [COMMAND] [BLOCK] [PARAMETERS...]\n\n", program_name);
printf("Commands:\n"); printf("Commands:\n");
printf(" get <block> Display all parameters of the specified block\n"); printf(" get <block> Display all parameters of the specified block\n");
printf(" set <block> ... Modify parameters of the specified block\n\n"); printf(" set <block> ... Modify parameters of the specified block\n");
printf(" version Display full version information\n");
printf(" ver Display short version\n\n");
printf("Available blocks:\n"); printf("Available blocks:\n");
const jl_block_t *block = jl_block_get_all(); const jl_block_t *block = jl_block_get_all();
@@ -84,6 +87,18 @@ main(int argc, const char *argv[])
// Передаем оставшиеся аргументы в метод set блока // Передаем оставшиеся аргументы в метод set блока
return block->set(argc - 3, &argv[3]); return block->set(argc - 3, &argv[3]);
} }
// Команда version
else if (strcmp(command, "version") == 0)
{
printf("jlv135_cli version %s\n", JLV135_VERSION);
return JLV135_CLI_OK;
}
// Команда ver (короткая версия)
else if (strcmp(command, "ver") == 0)
{
printf("%s\n", JLV135_VERSION_SHORT);
return JLV135_CLI_OK;
}
else else
{ {
fprintf(stderr, "Error: unknown command '%s'\n", command); fprintf(stderr, "Error: unknown command '%s'\n", command);