2015-06-17 3 views
0

Мне интересно, есть ли макрос или простой способ позволить компилятору приращивать майор, минор или ревизию моего кода каждый раз при компиляции?C Compiler automatic Индекс версии

Кстати, я использую компилятор ARM и uVision от Keil.

+0

Могу ли я спросить, почему вы хотите/должны делать это каждый раз, когда вы компилируете? – Borgleader

+0

Вам нужна постоянная память, чтобы «сохранить» предыдущую информацию ... файл i/o ... Также, как вы отмечаете «пересмотр моего кода»? двоичное имя? –

+1

Вы должны создать сценарий своей строительной техники для этого (например, ваш 'Makefile'). И я считаю, что это плохая идея, вы должны скорее зарегистрировать уникальный идентификатор вашего контрольного источника (например, используя ['git'] (http://git-scm.com/)) –

ответ

2

Установить версию не является компилятором. Это должно быть сделано в связи с системой управления версиями/версиями, такими как cvs/svn/git или другими. Ваш идентификатор сборки должен быть подключен к содержимому базы данных исходного кода, чтобы получить воспроизводимые сборки из проверок из вашей системы контроля версий. Или, если ваш код еще не привязан к вашей базе данных, должен быть предоставлен и скомпилирован грязный тег, чтобы дать пользователю программного обеспечения возможность увидеть, что это не контролируемая версия.

Простое подсчет значения в переменной может быть выполнен с помощью Makefile или в инструкциях до и после сборки, которые зависят от используемой среды IDE. К сожалению, для keil у меня нет опыта ...

0

Определить событие после сборки для запуска небольшой внешней программы. Программа должна модифицировать определенный файл .h. В файле заголовка задайте макросы, такие как VER_MAJOR, VER_MINOR, VER_BUILD. Строка даты и времени также может быть обновлена. Я использую этот метод и могу управлять номерами версий по своему желанию.

0

IMO, вам не нужно это делать, особенно увеличивайте число при каждом компиляции кода.

Задайте основную и второстепенную ревизию вручную в файле заголовка; вам не следует часто это делать.

Номер сборки должен быть связан только с номером ревизии исходного кода (т. Е. Вы должны иметь возможность создавать и перестраивать любую ревизию под контролем источника).

Представьте, что вы - команда из 5 разработчиков, и все строят и перестраивают на своей стороне, что представляет собой фактический номер сборки? все ли они обновляют заголовочный файл? , который несет ответственность за владение этим файлом заголовка?

0

Некоторые компиляторы поддерживают такие функции, как «пост-сборка», которая запускает программу по вашему выбору после компиляции, но это было бы сложно, если бы ваша программа была построена из нескольких исходных файлов , Однако не все компиляторы.

По этой причине я бы на самом деле не делал этого с помощью компилятора. Я бы сделал это в скрипте сборки (например, makefile) или настройке параметров сборки в вашей среде IDE.

Предполагая, что вы используете make или аналогичные, добавьте цель примерно setversion (вы выбираете имя), которая запускает программу, которая изменяет заголовочный файл, который указывает компоненты вашего номера версии. Поэтому ввод make setversion будет обновлять номера версий.

Возможно, эта цель также может - после обновления номеров версий - сделать make clean (т. Е. Удалить все объектные файлы и исполняемые файлы) и make all (перекомпилировать и связать все).

Я также предлагаю избегать изменения номеров версий после каждой перекомпиляции. Представьте, что вы тщательно тестируете и отлаживаете код, и проходите несколько циклов восстановления. Вы действительно хотите, чтобы номер версии обновлялся каждый раз, когда вы перекомпилируете даже один исходный файл? Это можно сделать так, если вы выберете, но сделайте каждый перестройку более продолжительным (и в проектах с несколькими исходными файлами) вам нужно будет позаботиться о том, хотите ли вы сохранить возможности для инкрементных сборок.