CMake is the future

CMake sarà il buld system principale di Qt 6. Prenderà il posto di qmake?

Con il rilascio di Qt 5.15, voglio approfondire l’uso di CMake per sviluppare progetti con Qt per desktop, sia per macOS, che per Linux che per Windows 10.

Attraverso una serie di post vedremo come creare un progetto, come aggiungere l’icona, come compilare per macOS, Linux e Windows e come impacchettare il tutto per il rilascio.

Il momento è opportuno dato che Qt 5.15 sarà una Long Term Release e sarà anche l’ultima versione di Qt 5. In attesa di Qt 6 questa sarà la versione che sviluppatori e aziende useranno per i loro progetti per molto tempo.

Che cosa è CMake?

Per quanto possa sembrare un argomento estremamente NERD, in realtà è semplice. Io lo definirei l’impastatore, ovvero un applicativo che data una ricetta genera l’applicazione, passando per tutti i passaggi intermedi.

Naturalmente la ricetta è scritta con un vero e proprio linguaggio di scripting, e i passaggi intermedi possono essere molto vari e oltre alla compilazione comprendere la copia di file, l’integrazione con git, l’attivazione dei test e molte altre cose.

Il sito ufficiale è cmake.org e si tratta di un progetto open source sebbene sia gestito principalmente da una azienda che si chiama kitware.

Come mai CMake?

Semplice, perchè qmake non riesce a fare le stesse cose. Con CMake si possono automatizzare molte più operazioni legate allo sviluppo di una applicazione, con lo scopo di rendere il tutto più veloce.

Ah, dimenticavo, oltre ad essere open source è anche multipiattaforma.

Che versione di Qt usare?

L’integrazione con CMake è in veloce evoluzione nelle ultime versioni, pertanto tra una versione e la successiva ci possono essere dei miglioramenti e dei bug fix. Quindi ho deciso di lavorare subito con Qt 5.15, che tra l’altro sarà una Long Term Release, quindi con un supporto commerciale per 3 anni, nonché l’ultima versione di Qt 5.

Per quanto riguarda Qt Creator, perché non provare il nuovo Qt Creator 4.12.0

Che cosa serve

Naturalmente serve Qt 5.15. Inoltre, durante l’installazione di Qt ricordatevi di installare anche CMake e Ninja, selezionando le due opzioni nel tool di installazione, nella sezione “Developer and Designer Tools”.

CMake è il software principale, mentre Ninja è un software che si occupa di ottimizzare la compilazione, partendo dai file generati da CMake e serve per parallelizzare le operazioni di compilazione.

Ulteriori informazioni le potete trovare su Wikipedia. Interessante leggere che il principale uso di Ninja è per compilare Google Chrome! (https://en.wikipedia.org/wiki/Ninja_(build_system)

Installazione per macOS

Naturalmente ci deve essere Xcode installato, poi si procede ad installare Qt 5.15 usando il tool di installazione o il tool di manutenzione.

Nello screenshot successivo si vede dove attivare CMake e Ninja, nel caso di una installazione per macOS.

Installazione di CMake e Ninja su macOS

Durante l’installazione ho visto un messaggio di Warning relativo ad una configurazione di Xcode. In particolare per qualche motivo non avevo alcun “Command Line Tools” attivo. Questo penso sia successo durante un aggiornamento di Xcode. La cosa si risolve andando nelle impostazioni di Xcode, nella pagina Locations e d impostando la versione di Xcode da usare.

Impostazione dei command line tools in Xcode
Ecco Xcode dopo avere attivato i command line tool

Installazione per Linux Ubuntu

Ecco come si attivano CMake e Ninja, usando il tool di manutenzione, in Linux.

Installazione di CMake e Ninja in Linux Ubuntu

Installazione per Windows10

Nel caso di Windows10, prima di installare Qt 5.15 è bene accertarsi di avere installato una versione di Visual Studio 2015 o meglio ancora di Visual Studio 2019, dato che la libreria supporta solo queste due versioni. Poi possiamo procedere ad installare Qt 5.15. Anche la Community Edition, che è gratuita, funziona bene.

Supporto per Microsoft Visual Studio in Qt 5.15

Per quanto riguarda CMake e Ninja, per installarli si devono selezionare in “Developer and Designer Tools”. Ecco come appare la schermata delle impostazioni:

Attivare CMake e Ninja durante l’installazione

Posso installare CMake e Ninja per conto mio?

Sì, se voglio usare una versione aggiornata, specialmente per CMake, ma è più veloce farlo usando usando il Tool di Manutenzione di Qt. Comunque nelle impostazioni di Qt è possibile specificare quale CMake usare, se quello installato con Qt o quello disponibile nel sistema.

CMakeWidgetProject: Proviamo a creare un progetto con CMake

Usando Qt Creator 4.12 e Qt 5.15, basta usare la creazione guidata per creare velocemente una applicazione basata su Qt Widgets, che chiameremo CMakeWidgetProject. Partendo da questo semplice esempio, lo svilupperemo in modo da completare gli elementi delle applicazione dalla versione, alla icona, fino al rilascio con macdeployqt / windeplyqt.

Creare un nuovo progetto Qt Widgets Application

Per crearla con CMake basta selezionare CMake nella pagina del Build System, al posto di qmake.

Il risultato è un applicativo con una finestra di dialogo principale, che compila immediatamente.

Funziona tutto subito! A cosa serve un tutorial?

Problemi di compilazione – macOS / Linux

Purtroppo provando con macOS e con Linux non sono riuscito a far funzionare Ninja, se non dopo aver capito che c’era un errore nel modo in cui veniva calcolato il suo percorso. Questo sia per macOS che per Linux Ubuntu.

(Adesso avete capito perchè mi sono messo a scrivere il tutorial?)

Pertanto la prima soluzione è stata quella di disattivare Ninja. Dopo tutto Ninja viene chiamato per elaborare i file creati da CMake, ma il suo lavoro può essere svolto direttamente dal sistema operativo tramite Make. Certo si perde in velocità di compilazione, ma almeno si compila. Per disattivare Ninja si deve aprire Projects – Manage Kits – selezionare il kit corrente:

Impostare il kit di compilazione

Poi scorrere la lista delle proprietà fino a CMake Generator e premere Change. Nella schermata che si apre, selezionare Unix Makefiles:

Disattivare Ninja

Soluzione: spostareNinja – macOS / Linux

Per debuggare il problema di compilazione con Ninja, dopo aver riattivato Ninja ho usato la funzione CMake:

message()

Nei post successivi vedremo in dettaglio come funziona CMake, per il momento voglio arrivare alla prima compilazione.

Questo mi ha permesso di vedere il contenuto della variabile PATH durante l’esecuzione di CMake:

message("ENV{PATH} = $ENV{PATH}")

Analizzando la striga stampata ho visto che conteneva

Qt/Tools/Ninja/ninja

mentre nel mio caso il percorso avrebbe dovuto essere

Qt/Tools/Ninja

Quindi il problema era nella variabile path e l’ho risolto spostando l’eseguibile Ninja dentro una cartella che si chiama ninja.

Spostare Ninja di un livello!

La stessa cosa l’ho fatta con Linux e il problema si è risolto.

Problemi di compilazione – Windows10

Durante le prove, dopo aver installato Visual Studio 2019, Qt 5.14, CMake e Ninja non sono riuscito a far funzionare la compilazione, probabilmente perché non tutte le impostazioni erano state applicate.

Ho provato a riavviare il computer e il problema si è risolto.

Quindi ancora una volta, il classico “Prova ad uscire e rientrare” ha funzionato!

Conclusioni

Per oggi basta, la prossima volta analizzermo gli elementi di un progetto CMake.

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 *