Несмотря на то, что в современных IDE есть встроенные средства инкремента номера версии, мне захотелось чего то своего, с девочками и преферансом. Ибо то, что предоставляется - это зачастую числовое значение, которое просто увеличивается от 1 и до упора. А хочется, например, строковую константу, да со своим форматом. Да с возможностью изменения/сброса в любой момент.
Я хочу просто где то в отдельном .h-файле записать строчку типа
#define FIRMWARE_VERSION "1.01.0001"
и что бы при каждой компиляции (или не при каждой) проекта последняя часть версии (0001) увеличивалась на 1. Причем не важно, строковый это дефайн будет или числовой (без кавычек).
Ну и за вечер накидал я себе некую консольную программку.
В качестве параметров в программку передается полное имя файла и имя дефайна.
Дополнительно можно указать полные имена других файлов. В таком случае программа будет отслеживать факт изменения этих файлов (по дате-времени файла) и обновлять версию только в случае изменения хотя бы одного из этих файлов.
Информация о дате-времени файла будет сохраняться автоматически в файле с дефайном, в комментариях определенного формата.
Ключ /F. Обязательный.
Тут необходимо задать имя и полный путь файла с дефайном версии. Если студия позволяет использовать макросы подстановки пути к проекту - хорошо. Не позволяет - пишем полный путь. Если путь к файлу содержит пробел - ключ со строкой надо взять в кавычки:
/F=c:\My projects\version.h"
Ключ /D. Обязательный.
Тут указывается имя дефайна с версией.
/D=FIRMWARE_VERSION
Ключ /A. Необязательный, может быть несколько.
В качестве параметра этого ключа задается имя и полный путь контролируемого файла (как в ключе /F).
При наличии этого ключа программа добавит в файл с дефайном комментарий определенного формата, в следующей после дефайна строке.
В этом комментарии будет указано имя контролируемого файла и дата изменения этого файла.
При вызове утилита проверяет (при наличии ключа /A) даты файлов, если файлы не изменялись - ничего не происходит.
Если хотя бы один файл изменен или ключ /A в параметрах отсутствует - номер версии будет увеличен на 1.
Запуск утилиты удобно настроить в Post build events.
Тогда номер версии будет увеличен только при успешной компиляции проекта. Минус - номер версии будет изменен в файле после компиляции проекта, т.е. в проекте номер версии будет на 1 меньше.
Можно запуск поставить в Pre-build events - тогда в проекте всегда будет актуальный номер версии. Минус - версия будет увеличиваться при каждой компиляции проекта, даже неуспешной.
Пример файла:
Утилита найдет дефайн, вычленит из него последнюю числовую часть и сохранит обратно, увеличив эту часть на 1.
Собственно - сама утилита тут. Утилита в архиве. Symantec и Defender молчат. Ибо там ничего подозрительного нет.
Вывод производится в консоль, можно посмотреть результат выполнения.
Как подключить утилиту на примере Atmel/Microchip Studio:
В свойствах проекта:
Макрос $(SolutionDir) подставляет в текст полный путь к проекту, включая завершающий слеш. Если путь содержит пробелы - ключ с параметром надо брать в "кавычки".
В Atollic TrueSTUDIO почти так же - в свойствах проекта:
Весьма интересная идея!
ОтветитьУдалитьКлассная полезная штука!
ОтветитьУдалитьПривет, неплохо бы еще добавить к версии дату и ремя
ОтветитьУдалитьдата и время есть в стандартньіх макросах си
Удалить__DATE__
__TIME__