Russian Qt Forum

Qt => Кладовая готовых решений => Тема начата: andrew.k от Март 19, 2015, 19:40



Название: Автоматическое получение ревизии SVN в ПО
Отправлено: andrew.k от Март 19, 2015, 19:40
Хотелось получить какое-то универсальное решение.
Использование DEFINES очень простое решение, но оно имеет недостаток, хоть и не критичный - нужно явно запускать qmake, для того чтобы обновить Makefile. А так же требуется перекомпиляция файла, в котором использовался дефайн.
Это мелочь, но в реальной жизни иногда вызывает раздражение.
Код
C++ (Qt)
# простое решение через дефайн
DEFINES += REVISION=\\\"$$system(svnversion $${PWD})\\\"

Поэтому попытался сделать нечто более удобное, что можно было повторно использовать.
Представляет собой файл version.pri который можно подключить к проекту.
В файле проекта:
Код
C++ (Qt)
# в файле проекта project.pro
include(version.pri)
 
После этого в момент компиляции будут генериться два файла version.cpp/.h, которые можно использовать в ПО.
Код
C++ (Qt)
#include "version.h"
//...
qDebug() << SVNVersionString();
 

Особенности:
  • не нужен дополнительный запуск qmake, чтобы обновить информацию о версии. Достаточно выполнить svn update && make
  • при выполнении очистки (make clean), сгенерированные файлы удаляются
  • при повторной компиляции, если ревизия не изменилась, то перекомпиляция исходников не происходит
  • работает на linux (проверено на Qt 5.4 в Kubuntu 14.04) и win32(пока не проверял, но должно)
  • нет дополнительных скриптов, все запихано в один файл
  • при первой компиляции, qmake не ругается на отсутствующие файлы
  • легко повторно использовать

Выкладываю, вдруг кому пригодится.
Приветствуются комментарии по моему решению.
Возможно кто-то использует более элегантное, я не нашел.

Во вложении файл (version.pri.txt) надо переименовать в version.pri, форум почему-то запрещает вложение с расширением .pri


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: vipet от Март 20, 2015, 09:49
Юзайте CMake, он рулез.

FIND_PROGRAM(SVN_EXECUTABLE svn
  DOC "subversion command line client")

MACRO(Subversion_GET_REVISION dir variable)
  EXECUTE_PROCESS(COMMAND ${SVN_EXECUTABLE} info ${dir}
    OUTPUT_VARIABLE ${variable}
    OUTPUT_STRIP_TRAILING_WHITESPACE)
  STRING(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
    "\\2" ${variable} "${${variable}}")
ENDMACRO(Subversion_GET_REVISION)

Subversion_GET_REVISION(${CMAKE_CURRENT_SOURCE_DIR} ProjectRevision)
MESSAGE(STATUS "Revision is ${ProjectRevision}")


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: Пантер от Март 20, 2015, 09:52
+1 за CMake.


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: Racheengel от Август 14, 2015, 17:33
но CMake не нужен...


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: Fregloin от Август 28, 2015, 15:01
Спасибо, решил заюзать.... в линуксе работает, в винде попробую позже.


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: Fregloin от Сентябрь 23, 2015, 14:41
рано радовался, в винде работает коряво, да и в линуксе тоже не ахти, пришлось отказаться


Название: Re: Автоматическое получение ревизии SVN в ПО
Отправлено: andrew.k от Сентябрь 24, 2015, 12:31
рано радовался, в винде работает коряво, да и в линуксе тоже не ахти, пришлось отказаться
В чем именно траблы?