Russian Qt Forum
Ноябрь 23, 2024, 04:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Автоматическое получение ревизии SVN в ПО  (Прочитано 9318 раз)
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
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #1 : Март 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}")
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Март 20, 2015, 09:52 »

+1 за CMake.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Август 14, 2015, 17:33 »

но CMake не нужен...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Август 28, 2015, 15:01 »

Спасибо, решил заюзать.... в линуксе работает, в винде попробую позже.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Сентябрь 23, 2015, 14:41 »

рано радовался, в винде работает коряво, да и в линуксе тоже не ахти, пришлось отказаться
Записан
andrew.k
Гость
« Ответ #6 : Сентябрь 24, 2015, 12:31 »

рано радовался, в винде работает коряво, да и в линуксе тоже не ахти, пришлось отказаться
В чем именно траблы?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 23.