CMake 05: La versione dell’ex(e)

Dopo aver visto come si inserisce la versione per una applicazione per macOS, vediamo ora come possiamo inserire la versione anche per un eseguibile per Windows.

Vi ricordo che su GitHub potete trovare il progetto e scaricarlo.

Anche in questo esempio faremo riferimento al nome del progetto, alla sua versione e ad un campo aggiuntivo chiamato LEGAL_COPYRIGHT da me definito, come per il caso macOS. Ecco il codice in CMakeLists.txt come definito nel post precedente:

project(CMakeWidgetProject LANGUAGES CXX VERSION 1.2.3.4)
set(LEGAL_COPYRIGHT "(C) 2020 www.GianbattistaGualeni.it")

La versione di un eseguibile

Giusto perché sia chiaro di cosa stiamo parlando, la versione dell’eseguibile, in un sistema Windows si vede facendo ALT+INVIO sul file eseguibile e poi selezionando il tab “Dettagli”. Ecco cosa apparirà, per il file CMakeWidgetProject.exe alla fine della trattazione:

Proprietà di un eseguibile visibile con ALT+INVIO.

Questo serve, per esempio, per controllare che la versione installata sia quella corretta, senza lanciare l’eseguibile. Ora vediamo come, con CMake, si possono inserire nel file le informazioni relative alla versione e al Copyright.

Creare un template per le risorse

Nel caso di Visual Studio, per inserire le informazioni relative all’applicazione (versione, autore, eccetera) serve un file di risorse che ha un formato testuale ed estensione rc.

Per inserire il file delle risorse si parte da un template. Partiamo da un qualsiasi file *.rc generato compilando con qmake, inseriamolo nella cartella del progetto e chiamiamolo

WinResources.rc.in

In alternativa lo potete recuperare anche dal mio progetto su GitHub.

Abbiamo visto in CMake 04 come funziona questo meccanismo. Si crea un file template e lo si trasforma nella sua versione finale espandendo le macro contenute. Solo che mentre in CMake 04 l’espansione viene fatta automaticamente, in questo caso la eseguiamo in modo esplicito, durante la fase di configurazione, tramite il comando: configure_file().

Onde evitare di ripetere più volte il nome del file, lo inseriamo in una variabile RESOURCE_FILE:

set(RESOURCE_FILE "WinResources.rc")
configure_file(${RESOURCE_FILE}.in ${RESOURCE_FILE})

A questo punto dobbiamo dire che nel nostro progetto vogliamo il file delle risorse, pertanto al comando add_executable() aggiungiamo il file, ricordando che si troverà nella cartella in cui viene compilato il progetto. Il nome del file lo generiamo con la variabile RESOURCE_FILE:

add_executable(CMakeWidgetProject
    ...
    ${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_FILE}
  )

Dopo aver eseguito CMake una volta (basta salvare CMakeLists.txt), nella struttura del progetto si vedono:

  • il file WinResources.rc .in
  • il file WinResources.rc dopo la conversione.

Se apro il file WinResources.rc posso controllare che la configurazione abbia funzionato correttamente. Ora possiamo iniziare a modificare il template.

WinResources.rc è ora parte del progetto

Modificare il template

Apriamo il file WinResources.rc.in in Qt Creator.

Le informazioni vanno inserite in vari punti usando @ come segnaposto delle variabili che verranno rimpiazzate. Iniziamo inserendo la versione del progetto nei campi:

  • FILEVERSION
  • PRODUCTVERSION

dove va inserita come sequenza di interi.

Ecco come diventa il codice:

VS_VERSION_INFO VERSIONINFO
    FILEVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,
                @PROJECT_VERSION_PATCH@,@PROJECT_VERSION_TWEAK@
    PRODUCTVERSION @PROJECT_VERSION_MAJOR@,@PROJECT_VERSION_MINOR@,
                   @PROJECT_VERSION_PATCH@,@PROJECT_VERSION_TWEAK@
    FILEFLAGSMASK 0x3fL

Sempre riguardo la versione, la dobbiamo replicare anche nei campi:

  • “FileVersion”
  • “ProductVersion”

che invece sono in formato stringa.

Ecco il codice:

VALUE "FileVersion", "@PROJECT_VERSION@\0"
VALUE "ProductVersion", "@PROJECT_VERSION@\0"

Poi usiamo PROJECT_NAME per valorizzare le informazioni relative all’applicazione nei campi:

  • OriginalFilename: aggiungiamo “.exe” al PROJECT_NAME
  • ProductName: usiamo il PROJECT_NAME

Per finire, compiliamo 3 campi descrittivi ovvero:

  • CompanyName: anche qui mettiamo la stringa LEGAL_COPYRIGHT anche se in realtà potremmo usare una stringa leggermente diversa.
  • FileDescription: qui mettiamo un mix tra PROJECT_NAME e LEGAL_COPYRIGHT, ma anche in questo caso si potrebbe fare di meglio.
  • LegalCopyright: con la stringa LEGAL_COPYRIGHT

Ecco il codice:

VALUE "CompanyName", "@LEGAL_COPYRIGHT@\0"
VALUE "FileDescription", "@PROJECT_NAME@ - @LEGAL_COPYRIGHT@\0"
VALUE "LegalCopyright", "@LEGAL_COPYRIGHT@\0"

A questo punto basta compilare, dopo di che facendo ALT + INVIO sull’eseguibile e selezionando Dettagli, ecco cosa diventano le proprietà:

Versione del file visibile con ALT+INVIO

Conclusioni

Anche in questo caso, inserire la versione è abbastanza veloce, se sai come fare!

Vi ricordo che potete trovare il codice su GitHub.

Per il momento è tutto! Nella prossima puntata vedremo come inserire l’icona nell’application bundle, ovvero nell’applicazione per macOS.

Newsletter QtQB

Se vuoi ricevere i miei post e le mie notizie via mail, iscriviti!

Autore: Gianbattista

Appassionato di tecnologia, sono l'autore di Qt5 Quanto Basta. Per lavoro mi occupo di elaborazione delle immagini per applicazioni industriali, ma nel tempo libero adoro creare applicazioni con Qt (www.qt.io)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *