Лучшие практики для управления версиями с помощью scons? - PullRequest
6 голосов
/ 11 марта 2011

Я бы хотел, чтобы мое приложение Qt / C ++ знало, какая это версия.Следует знать, что не из некоторых файлов конфигурации, а с номером версии, скомпилированным в двоичный файл приложения.Сама версия представляет собой строку типа «XYZ», где X - основной номер версии, Y - вспомогательный номер версии, а Z - версия под SVN (или номер версии под SVN за вычетом номера версии при выходе версии «XY0»),Как вы думаете, какой самый простой способ сделать это с помощью scons?

Ответы [ 2 ]

9 голосов
/ 11 марта 2011

SCons имеет Substfile и Textfile компоновщики для генерации файлов. Поэтому создайте функцию для расчета версии (используя pysvn или путем вызова команды svn) и запишите ее вывод в файл, используя Substfile (берет шаблон из файла) или Textfile (просто пишет предоставляемый контент). Затем скомпилируйте и свяжите этот файл с остальной частью приложения.

Файл должен быть исходным файлом (, а не заголовок) с содержимым, подобным (при условии C / C ++, но тот же метод будет подходящим для любого языка):

char *VERSION = "X.Y.Z";

(и любые другие альтернативные форматы, которые вы хотите) и объявите

extern char *VERSION;

где-то, после чего будет перекомпилирован только один файл плюс перекомпоновано приложение (что в любом случае произойдет, потому что некоторые другие источники, вероятно, тоже изменились, верно).

1 голос
/ 25 марта 2011

Вот еще несколько ответов из списка рассылки [scons-users].

Brian Cody:

Один параметр командной строки, в который мы передаемscons - версия репозитория SVN.Затем мы помещаем это число в определение (-DREP_NUM = \ "123 \") и строим строку в нашем коде C ++, который использует это число.Это для нашего сервера запустить сборку.Для локальных сборок мы фактически используем имя пользователя вместо номера версии, потому что чья-то локальная сборка версии XYZ не обязательно совпадает с чужой XYZ (в windows env var USERNAME содержит зарегистрированного пользователя).Еще одно соображение заключается в том, что изменение любой части оператора компиляции в scons означает, что цель автоматически устарела.Чтобы обойти эту проблему, наша система сборки выбирает одну цель объекта, которая на самом деле заботится о флагах, и передает только флаги компиляции этого одного объекта.

Удачи

Гэри Обербруннер:

Я бы хотел, чтобы мое приложение Qt / C ++ узнало, какая это версия.

Есть некоторая информация наhttp://www.scons.org/wiki/BuildNumberProcessing, что может быть полезным.

- - Гари

...