Название: Автоматическое проставление версии билда Отправлено: Awejk от Январь 11, 2010, 23:11 Как сделать, что бы автоматически при компиляции в релиз режиме в заголовок окна проставлялся номер билда (1.1, 1.2, 1.3, ....) А то ручками ставить проблематично.
Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 00:10 Неясно в чём именно у вас проблема. Что нужно автоматизировать и что такое номер билда?
Название: Re: Автоматическое проставление версии билда Отправлено: DOOMer от Январь 12, 2010, 00:21 Вероятно Awejk хочет задать где-то стартовый номер версии/билда и потом при каждой пересборке своего проекта чтобы этот номер увеличивался на 1.
Насколько я помню в windows IDE (дельфи, студия) такая "фича" была. Но там это делалось именно за счёт среды разработки. Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 00:24 Могу подсказать как это делается на CMake.
Название: Re: Автоматическое проставление версии билда Отправлено: DOOMer от Январь 12, 2010, 00:39 Dendy , подскажи плз. Мне тоже интересно, в свете того что решил отказаться от использования qmake в пользу Cmake.
Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 01:26 В самом CMake конечно же такой штуки нет, но это не мешает нам изголяться как угодно. CMake работает в двух режимах: 1) генератор системы сборки, 2) интерпретатор. То-есть нам нужно добавить в Makefile команду, которая будет инкрементировать номер сборки и записывать его куда-то в файл при каждом проходе make. Интерпретатор решает вопрос со скриптом, который это будет делать, а генератор - чтобы добавить этот скрипт в Makefile. Программа на этапе выполнения читает файл с номером сборки. При желании этот файл можно засунуть в систему Qt-ресурсов.
increment.cmake Код: set( filename "build-number.txt" ) CMakeLists.txt Код: cmake_minimum_required( VERSION 2.8 ) main.cpp Код
Название: Re: Автоматическое проставление версии билда Отправлено: DOOMer от Январь 12, 2010, 09:56 Dendy, благодарю. С ресурсами все тоже получилось.
Название: Re: Автоматическое проставление версии билда Отправлено: Awejk от Январь 12, 2010, 10:22 2Dendy
Зачем использовать cmake? Если уже и делать руками, то можно и без него(меньше кода, меньше логики). Например, задать переменную для Release режима что-то типа _RELEASE_BUILD_ и потом в коде при помощи препроцессорных директив прописать тоже самое что и Вы(только добавить ещё инкремент на единицу, и сохранение в файл). А имел ввиду я создание такой штуки именно с помощью IDE. Что бы она всё сама просчитывала и давала мне только уже переменную для релиз режима, которую я уже подставляю куда хочу. Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 10:23 При желании можно хранить номера сборок отдельно для Debug, Release и других конфигураций. Вопрос к знатокам pro-файлов - попробуйте решить эту же задачу с QMake.
Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 10:36 Awejk, ваша правда, нехорошо если вдруг на этапе выполнения файла с номером сборки не окажется. Тогда конечно можно генерировать заголовочник с директивой. К примеру так:
Добавляем прототип заголовочника, build_number.h.template Код: #define _RELEASE_BUILD_NUMBER_ ${build_number} Дописываем в конец increment.cmake Код: ... Теперь программа на порядок элегантнее: main.cpp Код
Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 10:40 А имел ввиду я создание такой штуки именно с помощью IDE. Что бы она всё сама просчитывала и давала мне только уже переменную для релиз режима, которую я уже подставляю куда хочу. Во-первых, привязывать функционал к IDE - моветон. Вы рискуете потерять эту возможность при сборке с командной строки, переходе на другую платформу, на другую IDE. Во-вторых, не совсем ясно о какой переменной идёт речь, которую вы собираетесь подставлять куда хочу. Название: Re: Автоматическое проставление версии билда Отправлено: Awejk от Январь 12, 2010, 11:14 Код: Во-первых, привязывать функционал к IDE - моветон. Второй вариант программы вполне красиво смотрится. С CMake я не работал, посему у меня вопрос, если я такое сделаю у себя, то на сколько оно будет корректно работать в Linux & Windows? Например, сейчас я работаю в Windows в студии, и проект собираю полностью средствами студии. Затем мне надо перенести пиложение на Linux открою код в том же QTCreator, а этот код по генерации билда, будет также корректно работать, как и в студии? Или тут есть подвох? Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 11:26 Подвохов никаких нет, будет работать одинаково на всех платформах в любых IDE в режиме Makefile-проекта. Я так работаю в MSVC и Eclipse. Единственно что пример стоит улучшить, чтобы под Windows и Linux номер сборки был разный, то-есть сохранялся в разные файлы.
Название: Re: Автоматическое проставление версии билда Отправлено: Awejk от Январь 12, 2010, 12:32 Цитировать Я так работаю в MSVC и Eclipse MSVC в windows а Eclipse в другой системе?В MSVC работаете как обычно, т.е. дебажить F5, что бы собрать - снова из сутдии нажали Rebuild по проекту из контекстного меню? Т.е. CMake прописывается где-то в свойствах проекта как в MSVC так и для Eclipse? Название: Re: Автоматическое проставление версии билда Отправлено: Dendy от Январь 12, 2010, 12:50 MSVC в Windows, Eclipse в Windows и Linux. Во всех случаях использую Makefile-проекты. Для студии правила сборки и пересборки задаются в настройках проекта, горячие клавиши - как обычно. CMake как правило не прописывается - он один раз запускается извне IDE, далее пересборка только с помощью make/nmake.
Название: Re: Автоматическое проставление версии билда Отправлено: SASA от Январь 12, 2010, 13:08 http://www.prog.org.ru/topic_5495_0.html (http://www.prog.org.ru/topic_5495_0.html)
Название: Re: Автоматическое проставление версии билда Отправлено: SABROG от Январь 12, 2010, 14:36 Вопрос к знатокам pro-файлов - попробуйте решить эту же задачу с QMake. Qt уже использует perl при сборке, так что пихайте скрипт в target.commands или если нужен вызов на этапе создания makefile'ов, то типа такого: Код: MYVAR = $$system(perl ...) Название: Re: Автоматическое проставление версии билда Отправлено: mks56 от Февраль 20, 2010, 07:09 Может немного не в тему, но при использовании в Win в качестве средства контроля версий связки Subversion+TortoiseSVN в составе последней есть утилита SubVCRev, которая как раз для этого и предназначена. Правда, в качестве номера будет ревизия Subversion.
Название: Re: Автоматическое проставление версии билда Отправлено: SABROG от Февраль 20, 2010, 23:39 Можно сделать как это делает Qt с qmake. Написать консольную утилиту, которая делает всю черную работу. В .pro файле искать готовый исполнимый файл этой утилиты, если её нет, то из исходников сначала собирается эта утилита, затем вызов подставляется в makefile'ы. В момент сборки сначала идет вызов этой утилиты, затем собираются исходники проекта.
Только всё это ерунда. Я не могу вспомнить ни одной программы в исходниках которой был инкремент версии. И это правильно. Просто подумайте, вы скачали исходники Qt 4.6.2, сделали configure, а в заголовке какого-нибудь QtDesigner'a у вас стоит версия Qt 4.6.3, а если сделаете еще раз перекомпиляцию, то будет 4.6.4 и т.д. За версиями должен следить разработчик и коду, который увеличивает версию нечего делать в исходниках проекта, которые распространяются для других людей. Если это действительно нужно, то должно быть 2 .pro/CMakeList.txt файла, один публичный, другой приватный. Название: Re: Автоматическое проставление версии билда Отправлено: crackedmind от Февраль 22, 2010, 07:25 Пример с Qt какой то странный. Зачем при каждом билде увеличивать patch version? Есть же много софта у которого 4х значный номер версий например 1.1.2.2056 :) И иногда бывает что удобнее выпустить версию 1.1.2.2057 с багфиксом серъезной ошибки , нежели обзывать ее 1.1.3.
Название: Re: Автоматическое проставление версии билда Отправлено: lit-uriy от Февраль 22, 2010, 09:50 Цитировать И иногда бывает что удобнее выпустить версию 1.1.2.2057 с багфиксом серъезной ошибки , нежели обзывать ее 1.1.3. У меня несколько вопросов:1) Что означает 3 цифра? 2) Для кого удобнее? 3) Почему удобнее? Название: Re: Автоматическое проставление версии билда Отправлено: SABROG от Февраль 22, 2010, 09:51 Не согласен, это какой-то хаос с версиями будет. Всё равно что выпускать новую версию программы на каждый чих. "А что нового в новой версии?" - "Ничего, отступы п$оправил..."
Думаю лучше придерживаться GNU version scheme. Название: Re: Автоматическое проставление версии билда Отправлено: SASA от Февраль 22, 2010, 11:48 Основную версию надо прописывать руками (неапример 3.2). Но в скомпилированный проект должен попасть номер, который однозначно ассоциируется с исходниками. Щёлкаешь "О программе" и видишь 3.2.23213. Удобно для поддержки. У нас в проекте 23213 - это номер ревизи в SVN.
как это можно сделать - http://www.prog.org.ru/topic_5495_0.html (http://www.prog.org.ru/topic_5495_0.html) Название: Re: Автоматическое проставление версии билда Отправлено: ufna от Февраль 22, 2010, 13:06 Хз, я давным-давно для этих целей написал микропрогу, которую среда запускает после успешного билда. Она правит .rc и радуется жизни. Ну, приходится для среды настраивать post-build event, ну и черт с ним как бы.
Название: Re: Автоматическое проставление версии билда Отправлено: crackedmind от Февраль 22, 2010, 21:43 Цитировать 1) Что означает 3 цифра? А что непонятного?1 - major version 2 - minor version 3 - patch version 4 - build version Название: Re: Автоматическое проставление версии билда Отправлено: lit-uriy от Февраль 23, 2010, 03:32 Цитировать 4 - build version Я вот и не понимаю зачем номер сборки, что полный бардак в конторе? Каждая пара "make clean" + "make" приводит к разным результатам работы программы?Цитировать Щёлкаешь "О программе" и видишь 3.2.23213. Удобно для поддержки. У нас в проекте 23213 - это номер ревизи в SVN. Опять бардаком пахнет.Я вот получаю от пользователя, например, "Программа 3.2.1", лезу в гит и смотрю соответствующую метку (tag) или в SVN, тоже самое, только там это каталог отдельный. У меня пара "make clean" + "make" на одной и той же версии, даёт один и тот же результат. И по другому быть не может Название: Re: Автоматическое проставление версии билда Отправлено: igor_bogomolov от Февраль 23, 2010, 04:04 Считать количество компиляций, на мой взгляд, действительно бессмысленно. Тем более при совместной разработке. А вот иметь возможность идентифицировать, на основе какой ревизии или коммита базируется программа, очень удобно. Так что в чем бардак, не понимаю.
Я например делаю так. Код
Название: Re: Автоматическое проставление версии билда Отправлено: crackedmind от Февраль 24, 2010, 06:40 lit-uriy
В рамках выпуска версии "3.2.1" можно сделать несколько билдов, в каждом из которых может быть исправления или добавления чего то. Попасть к пользователю случайно может любая из них. Как ты будешь идентифицировать в каком из билдов была допущена ошибка? Билд инфа для разработчиков чтоб удобнее было искать ошибку. Если следовать твоей логики многие конторы ошибаются что идентифицируют версии программ по билдам)) Название: Re: Автоматическое проставление версии билда Отправлено: lit-uriy от Февраль 24, 2010, 07:09 lit-uriy Как такое может быть?В рамках выпуска версии "3.2.1" можно сделать несколько билдов, в каждом из которых может быть исправления или добавления чего то. Исправления отмечаются строго третьей цифрой Минорные добавления - второй Одновременно исправления и минорные добавления - второй. Если следовать твоей логики многие конторы ошибаются что идентифицируют версии программ по билдам)) Совершенно верно. Это надёжный признак не надёжной разработкиПопасть к пользователю случайно может любая из них. Это я вообще не понял, как к пользователю случайно может попасть конечный продукт?Название: Re: Автоматическое проставление версии билда Отправлено: frostyland от Октябрь 13, 2010, 10:21 Хмм.
А как в Qt проставляются версии надстроек, к примеру? Что-то я не помню в описании создания плагинов какихто танцев с бубнами... С уважением, ВВК Название: Re: Автоматическое проставление версии билда Отправлено: Denjs от Октябрь 13, 2010, 13:52 Я предпочитаю не номер билда, а дату сборки.
Так как использую GCC и MinGW - то это работает: main.cpp Код: #ifdef __TIME__ Оно плохо - дата тут выдается в Ну и, подозреваю, это не работает под MSVS, но по мне так на это и наплевать) PS: тут говорят (http://forum.sources.ru/index.php?showtopic=277205&view=findpost&p=2315445), есть ещё куча других вставок: Цитировать __LINE__, __FILE__, __DATE__, __TIME__, __func__, __VA_ARGS__ (а тут их описывают (http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html#Predefined-Macros))Название: Re: Автоматическое проставление версии билда Отправлено: SASA от Октябрь 14, 2010, 10:12 По поводу билдов и четвёртой цифры.
Название: Re: Автоматическое проставление версии билда Отправлено: Denjs от Октябрь 14, 2010, 11:48 По поводу билдов и четвёртой цифры. Нельзя у строителя собачьих будок учиться строить замки. Вы будете строить не замки, а большие собачьи будки.Нельзя смотреть на то как "это делает" майкрософт и учиться у них "этому"))) Вы будете создавать большие глючные быдло-приложения)))) ;D Название: Re: Автоматическое проставление версии билда Отправлено: frostyland от Октябрь 14, 2010, 11:57 По поводу билдов и четвёртой цифры. Нельзя у строителя собачьих будок учиться строить замки. Вы будете строить не замки, а большие собачьи будки.Нельзя смотреть на то как "это делает" майкрософт и учиться у них "этому"))) Вы будете создавать большие глючные быдло-приложения)))) ;D А я бы за Excel поставил M$ памятник ))) А за Word тут же снес бы его обратно )) Название: Re: Автоматическое проставление версии билда Отправлено: SASA от Октябрь 14, 2010, 14:13 Нельзя смотреть на то как "это делает" майкрософт и учиться у них "этому"))) Вы будете создавать большие глючные быдло-приложения)))) ;D Столь категоричные суждения больше говорят об авторе, чем об Майкрософте.Ещё пару скриншотов. |