Вот решение для Win7, которое я придумал на основе решения handle .
Это решение также заставляет Windows выдавать свою версию #, когда вы щелкаете правой кнопкой мыши по цели и выбираете Свойства | Подробности. Он работает в Win7 и, возможно, в самых ранних версиях.
Хорошо, вы делаете свой build_inc.bat:
@echo off
copy /b myapp.rc +,,
set /p var= <build.txt
set /a var= %var%+1
echo %var% >build.txt
echo #define BUILD %var% >build.h
и поместите его в папку proj. (copy /b myapp.rc +,,
непостижимо для Microsoft - eese для «прикосновения» - для обновления метки времени файла.) Пока все хорошо - и что? !!
Эта часть не обязательна, если вам не нужна версия, закодированная в двоичном файле. Создайте файл .rc, например ::
#include "build.h"
1 VERSIONINFO
FILEFLAGS 32
FILEVERSION 1, 0, BUILD, 0
PRODUCTVERSION 1, 0, BUILD, 0
FILEOS 4
FILETYPE 1
{
BLOCK "StringFileInfo"
{
BLOCK "040904B0"
{
VALUE "FileDescription", "program"
VALUE "OriginalFilename", "program.exe"
VALUE "CompanyName", "you"
VALUE "FileVersion", "Release"
VALUE "LegalCopyright", "Copyright (c) 2016, you, fool!"
VALUE "ProductName", "Yer proggie"
VALUE "ProductVersion", "Release"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409, 0x04B0
}
}
Более полная версия доступна здесь: Управление версиями DLL . Кстати: он не будет работать без блока VarFileInfo. Этот .rc используется для таких вещей, как щелчок правой кнопкой мыши и получение этой информации в Свойствах | Подробности. У меня есть и файл M $ .rc для этой информации, и значок приложения, и я добавляю другие ресурсы в Qt Creator в разделе Ресурсы.
Не так уж и необязательно: вот часть, которую я потратил некоторое время, чтобы найти. В Qt Creator, открыв yer proj, щелкните по маленькому значку компьютера и переведите его в режим выпуска. Нажмите на «Проекты». Нажмите «Добавить шаг сборки», выберите «Пользовательский шаг процесса» и нажимайте на значок шляпы «^», пока он не окажется вверху списка. Допустим, вы назвали yer .rc, "myapp.rc". Сделайте шаг сборки следующим образом:
Command: cmd.exe
Arguments:/c build_inc.bat
Working Directory: %{CurrentProject:Path}
Хотя версия на основе qmake может хорошо работать из командной строки или инструментов командной строки, вызываемых из IDE, в Qt Creator, я считаю, шаги сборки предпочтительнее. Qt Creator фактически не запускает qmake для каждой сборки; но шаги сборки выполняются при каждой сборке.
Теперь добавьте это в ваш .pro файл:
RC_FILE += myapp.rc
Также добавьте myapp.rc в свой проект. Он появится в разделе «Другие файлы».
Теперь восстановите. Каждая перестройка будет вызывать прикосновение к файлу ресурса, поэтому каждый раз запускается «rc». В противном случае номер сборки не будет закодирован в двоичное право. Это бежит быстро для меня. Каждая перестройка будет увеличивать это число. Я только удосужился добавить их в сборку "Release"; поэтому отладочные сборки не увеличивают это. Они просто будут использовать номер последней сборки. Я думаю, вам нужно будет запустить его один раз в релизе, чтобы избежать ошибки. Это работает без повторного запуска qmake каждый раз в Qt Creator; и каждый раз дает вам другой номер сборки. Это не вызывает никаких других перекомпиляций. У вас есть накладные расходы на запуск «rc» и связывание каждый раз, вместо того, чтобы ничего не делать, если все обновлено; но ОТО, я делаю это только для релизных сборок; вы почти всегда делаете ссылку на сборку или запускаете в любом случае; и снова «rc» - быстрый.
Необязательно: Вы можете перемещать символ препроцессора BUILD в любом месте. #. (Примечание: вы также можете добавить иконку приложения примерно так:
IDI_ICON1 ICON DISCARDABLE "Icons/myicon.ico"
Это позволяет ему отображаться в Проводнике даже до запуска файла.)
Вы также можете формально добавить "build.h" к вашему проекту в Qt Creator, включить его в файл, в котором вы хотите использовать build # in, и использовать его как строку, например, с:
#include <QDebug>
#include "build.h"
#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
qDebug() << QString("(build ")+STR(BUILD)+")";
Я только что заметил побочный эффект: если вы сделаете это таким образом, он будет перестраиваться перед каждым запуском в Release. Я думаю, что это не так уж плохо, чтобы заплатить. Я думаю, я всегда могу скопировать среды выполнения в каталог релиза и запустить его из Проводника; или просто смириться с дополнительной компиляцией моего about.h, прогоном «rc» и ссылкой с каждым прогоном в релизе. Впрочем, я мог бы просто создать внешний инструмент для запуска его с помощью сочетания клавиш. Я, конечно, открыт для любых улучшений в этом. В настоящее время я не беспокоюсь, так как простая компиляция "about.cpp", запуск "rc" и соединение с каждым запуском занимает не очень много времени. Все-таки люди: автоматические номера сборки!
☮!
Редактировать: Необязательно: Чтобы заставить его увеличивать номер сборки только при сборке или перестройке проекта, но не при запуске (даже если сборка всегда будет происходить в Release), перейдите в Projects | Построить и запустить | Запустите, нажмите «Добавить шаг развертывания» и выберите «Шаг пользовательского процесса»:
Command: cmd.exe
Arguments: /c if exist build.old copy /y build.old build.txt
Working Directory: %{CurrentProject:Path}
Затем добавьте
copy /y build.txt build.old
после отключения @echo в файле .bat. Возможно даже создание новых шаблонов проектов, хотя и связанных с ними: Расширение руководства Qt Creator
Редактировать: теперь я заставил его работать с одним, а не с двумя пользовательскими шагами сборки.