Название: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 16, 2012, 00:20 Здравствуйте. Когда я хочу сменить версию приложения, мне приходится менять её в разных файлах:
Это слегка напрягает, плюс где-нибудь могу и забыть поменять. Хотелось бы унифицированного решения: прописать версию в каком-то одном месте, а она оттуда автоматически разойдётся куда нужно. Вариант написать какой-то скрипт (shell/batch/perl/etc.), который будет заменять номер версии в указанных файлах, понятен, но может есть другой способ (через дефайн может как-нибудь)? Название: Re: хранить номер версии приложения в одном месте Отправлено: V1KT0P от Декабрь 16, 2012, 01:50 Вариант написать какой-то скрипт (shell/batch/perl/etc.), который будет заменять номер версии в указанных файлах И прописать его запуск перед билдом, как по мне лучший способ в плане не морочить себе голову.Название: Re: хранить номер версии приложения в одном месте Отправлено: Dancing_on_water от Декабрь 16, 2012, 15:35 Не знаю как у вас, но, я делаю так в pro пишу:
Код
Затем в Qt Creator удаляем этап qmake. Вставляем этап особый, где вручную запускаем qmake с нужными параметрами (нужно это, т.к. этап qmake по умолчанию имеет одну особенность: если .pro не меняли, то этап пропускается) А в коде юзаем макрос VERSIONINFO Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 16, 2012, 20:05 этот способ не подходит по нескольким причинам:
1) жёсткая привязка к гиту (хоть у меня и в гите исходники, но всё же). к тому же, результат какой-то не такой как ожидается: Код 2) результат распространяется лишь на исходный код, а никак не на внешние файлы. чувствую, что единственным канонічным выходом является скрипт (лучше перл или питон, чтобы от платформы не зависеть). Название: Re: хранить номер версии приложения в одном месте Отправлено: vregess от Декабрь 16, 2012, 20:12 Если есть возможность не использовать qmake, то я бы перешел на cmake. Там можно генерировать файлы: config.h.in -> config.h
Переменные в config.h.in заменяются на значения, прописаные в cmake скрипте. Если надо qmake, то видимо да - писать отдельный скрипт (который будет делать то же самое). Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 16, 2012, 20:27 возможность-то есть (Qt проекты можно же собирать через cmake вместо qmake, да?), но есть ли автоматические средства перевода на cmake? или там всё просто делается ручками?
кстати, если не ошибаюсь, то ли уже в релизе Qt 5, то ли в ближайшем будущем, будет улучшенный qmake (где-то в блоге Qt об этом писали) Название: Re: хранить номер версии приложения в одном месте Отправлено: vregess от Декабрь 16, 2012, 22:10 Да, qt4 проекты собирать можно, есть встроенная поддержка.
Не пользовался, но первое попавшееся: http://sourceforge.net/projects/qmake2cmake/ (http://sourceforge.net/projects/qmake2cmake/) Но я бы с нуля переписал скрипт. По поводу просто. Ну как сказать. Так-то да, особенно, если вникнешь. Можно достаточно быстро накидать скрипт для мелких проектов (я для ряда утилит и библиотек писал скрипты, чтоб под виндой собрать, типа lau, sqlcipher). Постоянно пользуюсь cmake, и мне кажется он лучше qmake. "Скриптовый язык" там достаточно низкоуровневый, так что всякие хитрые штуки делать возможно. Если тролли/digia создадут систему сборки лучше cmake (надеюсь), то с удовольствием перелезу, тк cmake тоже не идеален. Но пока out-of-the-box фичи лучше, чем у других систем, имхо. А та новая утилита называется qbs (https://blog.qt.digia.com/blog/2012/02/15/introducing-qbs/). И это будет не улучшенный qmake, а совсем другая вещь, тк qmake и cmake - это всего лишь генераторы makefile, а qbs сам будет вызывать компилятор и линкер, навроде scons + декларативный язык (что-то схожее с maven, как я понимаю) + низкоуровневые штуки на js. Когда они ее допилят, не известно, но я бы еще полгода подождал. cmake более зрелый. Такая вот петрушка. Название: Re: хранить номер версии приложения в одном месте Отправлено: twp от Декабрь 16, 2012, 22:57 по поводу генерации версии под маком.
qmake же умеет генерировать info.plist, то почему бы не воспользоваться этим? переменная QMAKE_INFO_PLIST по идее должна помочь в этом а что касается винды и установки версии в qApp то самый простой способ это генерация файла версии version.h по шаблону version.h.in из pro-файла. Этот файл соответсвенно включается RC-файл и исходник, где устанавливается версия для qApp. В итоге версия приложения указывается только в pro-файле для генерации version.h я просто написал небольшую тулзовину на qt чтоб не привязываться ко всяким скриптовым языкам. Код
в pro-файле просто передаются номер версии в командной строке Код
файл шаблона version.h.in Код
Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 16, 2012, 23:19 по поводу генерации версии под маком. я только знаю, что в шаблоне info.plist можно использовать @EXECUTABLE@ и @ICON@, что я и делаю. хотя вот только что заглянул в документацию — там обновилась информация:qmake же умеет генерировать info.plist, то почему бы не воспользоваться этим? переменная QMAKE_INFO_PLIST по идее должна помочь в этом Цитировать In the .plist file, you can define some variables, e.g., @EXECUTABLE@, which qmake will replace with the actual executable name. Other variables include @ICON@, @TYPEINFO@, @LIBRARY@, and @SHORT_VERSION@. по идее @SHORT_VERSION@ — как раз самое оно, сейчас буду пробовать.спасибо за код. Название: Re: хранить номер версии приложения в одном месте Отправлено: twp от Декабрь 16, 2012, 23:27 да, @SHORT_VERSION@ скорее всего как раз то что нужно, хотя сам я не еще пробовал
Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 16, 2012, 23:32 увы, не то. для VERSION = 0.3.1 @SHORT_VERSION@ выдаёт 0.3 :(
а @TYPEINFO@ вообще ???? выдало (ну может это предназначено только для библиотек). Название: Re: хранить номер версии приложения в одном месте Отправлено: Alex Custov от Декабрь 17, 2012, 15:19 Для 1) 2) и 4) я делаю всё вручную так (mingw-only):
Код
Код
Код
Название: Re: хранить номер версии приложения в одном месте Отправлено: lesav от Декабрь 17, 2012, 16:42 Поиск по форуму решает все проблемы, и не создает новые.
http://www.prog.org.ru/index.php?topic=19099.msg128736#msg128736 Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 17, 2012, 18:05 указанная тема точно так же не решает проблему с info.plist
Название: Re: хранить номер версии приложения в одном месте Отправлено: Alex Custov от Декабрь 17, 2012, 18:18 версию в plist можно менять скриптом, вызов которого записать в QMAKE_POST_LINK
Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 17, 2012, 18:28 именно к этому и склоняюсь. но почему в POST_LINK? вроде ж info.plist обрабатывается и копируется до начала сборки, так что надо в PRE_LINK.
Название: Re: хранить номер версии приложения в одном месте Отправлено: Alex Custov от Декабрь 17, 2012, 18:35 именно к этому и склоняюсь. но почему в POST_LINK? вроде ж info.plist обрабатывается и копируется до начала сборки, так что надо в PRE_LINK. Вообще да, тебе лучше знать, т.к. я не знаком с Mac, просто предложил мысль. Думаю, что даже скрипт писать не нужно, а сразу записать нужную команду прямо в PRE_LINK. Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Декабрь 17, 2012, 19:25 командой вряд ли получится обойтись — ведь надо менять содержимое файла. или можно как-то так?
Код (с sed не знаком, написал замену в perl-style) Название: Re: хранить номер версии приложения в одном месте Отправлено: Alex Custov от Декабрь 17, 2012, 20:16 командой вряд ли получится обойтись — ведь надо менять содержимое файла. или можно как-то так? Код (с sed не знаком, написал замену в perl-style) sed -i меняет файл сразу: Код: sed -i 's/trololo//' info.plist Расположение опции -i может зависеть GNU это версия или нет. Название: Re: хранить номер версии приложения в одном месте Отправлено: kambala от Январь 27, 2013, 04:15 в общем, воспользовался кодом, приведенным Alex Custov и lesav, плюс sed для мак ос, всё работает на ура, за что им большое спасибо.
но поскольку под виндой разработка ведётся в студии, а не в креаторе, то тут уже без внешнего скрипта не обошлось (может такого же эффекта, как и для .pro, можно достичь через ручное редактирование .vcxproj, но я в этом не силён). дефайны нужно лишь один раз прописать в свойствах проекта как для компиляции, так и для обработки ресурсов (сначала NVERX (X=1-4), а потом NVER_STRING), а потом, при обновлении версии, просто запускать незатейливый перл-скрипт с новой версией в качестве параметра, который обновит дефайны: Код примеры запуска: Код
Название: Re: хранить номер версии приложения в одном месте Отправлено: twp от Май 14, 2013, 10:53 недавно на Qt Project повилась небольшая статья (http://qt-project.org/wiki/QMake-top-level-srcdir-and-builddir) в которой описывается недокументированная переменная QMAKE_SUBSTITUTES. Она позволяет генерировать файлы на основе шаблонов, что избавляет от использования дополнительных скритов. Я уже перевел генерацию Info.plist используя эту переменную и работает отлично. Странно что эту переменную не задокументировали и ее нет среди обзоров недокументированных возможностей qmake.
|