Хотелось получить какое-то универсальное решение.
Использование 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