venerdì 12 dicembre 2014

Modern C++ - I tools di sviluppo

Ben ritornati sulle pagine del corso di Modern C++ sul blog di Luigi Bit3Lux.

Nella puntata precedente ho spiegato un po' di cosa si tratterá in questo corso e ho accennato al linguaggio in sé. Non volendo risultare monotono, preferisco affrontare gli aspetti teorici man mano che tocchiamo con mano gli strumenti e il codice sorgente dei programmi che andremo a scrivere.


Ovviamente, per gli esigenti e gli assetati di conoscenza, metteró a disposizione una serie di link a risorse utili, principalmente in inglese, per via della maggiore qualitá e poiché spesso alcune traduzioni risultano fuorvianti in alcuni testi.

Riporto nuovamente qui il sistema operativo di riferimento utilizzato: Lubit Linux Eagle 4.0. Qualsiasi distribuzione Linux derivata da Debian o Ubuntu va comunque bene. Gli utenti ArchLinux, Fedora o Gentoo possono seguire le guide nei rispettivi wiki su come installare gli strumenti necessari. Il nome dei tools rimane esattamente lo stesso.

Gli Strumenti di lavoro

Oggi ci occuperemo di configurare la nostra fiammante macchina con i tools di sviluppo che andremo ad usare per queste prime puntate: il compilatore, un IDE (ambíente di sviluppo), un gestore di progetti ed un tool per la gestione del codice.
Quali e cosa sono esattamente questi tools?

Compilatore

Il compilatore è un programma (o un set di programmi) che converte istruzioni C++ in istruzioni in linguaggio macchina, generando il cosídetto codice oggetto. Questo codice oggetto viene generato col fine di creare ció che poi diventa il prodotto finale, il programma eseguibile. L'argomento compilatore è molto vasto e prometto di dedicarci un post specifico solo su di esso. Per il momento, consideratelo come una scatola nera che produce risultati toccabili con mano. Nel nostro caso, utilizzeremo il compilatore piú usato al mondo: GNU GCC.

IDE (Integrated Development Environment)

L'IDE è un ambiente di lavoro che permette di gestire progetti e codice sorgente in modo semplice ed efficace: in genere, integra un editor di testo, una collezione di tools per compilare il codice (quindi il compilatore viene utilizzato/integrato dall'IDE) e trovare problemi nei programmi che realizziamo. Un IDE definisce un progetto (Linux style) o soluzione (Windows style), una collezione di file che includono i parametri per la generazione di file eseguibili, percorsi di librerie esterne, ecc.
Qui la scelta è molto variegata, in dipendenza dei gusti personali. Poiché il nostro corso prevede anche l'utilizzo di Qt, pertanto il nostro IDE di riferimento sará QtCreator.

Gestore di Progetti

Quando si ha a che fare con librerie di terze parti, progetti complessi o progetti cross-platform (ovvero, che funzionano anche su altri sistemi operativi/piattaforme), occorre ottimizzare i tempi e ridurre gli errori introdotti dal fattore umano (es., immettiamo percorsi di directory inesistenti, alcuni valori non sono esatti, ecc.). In soccorso arriva il gestore di progetti, che permette di definire una configurazione dei progetti, generando in semplici passi i file di progetto dell'IDE di riferimento. Ad esempio, se utilizziamo QtCreator, il gestore di progetto sará in grado di generare i file per questo IDE. Se utilizziamo Microosft Visual Studio su Windows, esso sará in grado di generare le soluzioni.
Il gestore di progetti must-have è CMake. CMake permette di generare quindi file di progetto, ma anche di generare progetti redistribuibili, ovvero eseguibili su altri computer, diversi dal nostro.

Gestore del Codice Sorgente

Quante vi è capitato di effettuare modifiche ad un file e magari aver cancellato accidentalmente alcune parti utili? Come fare a recuperarli? Come fare a collaborare con altre persone sugli stessi file, mantenendo una certa coerenza ed integritá tra le farie modifiche apportate? La risposta è nei gestori di codice sorgente, o versioning tool (tool per il controllo di versione). Anche in questo caso la scelta è variegata, ma in questo corso utilizzeremo il tool che usa anche il papá di Linux, il nostro amatissimo Linus, che è tra l'altro l'ideatore del tool stesso, git. Esistono anche vari servizi web che offrono la possibilitá di effettuare un backup online del nostro codice e di condividerlo con altri sviluppatori, come ad esempio GitHub e BitBucket.

Installazione dei tool

E' il momento di passare all'atto pratico. Avviate il terminale della vostra distribuzione ed eseguite i seguenti comandi (richiede i permessi di root):


sudo apt-get update && sudo apt-get dist-upgrade -y 
sudo apt-get install build-essential cmake git qtcreator -y

Il risultato a schermo sará il seguente:


Installazione delle dipendenze
Il sistema vi chiederá di installare alcune dipendenze, necessarie al funzionamento dei tools richiesti. Una volta completato il processo (ci metterá un po' a seconda della vostra connessione), sarete pronti per scrivere il vostro primo programma in C++!

Primo Programma con QtCreator

Di seguito vi allego gli screenshot dei passaggi effettuati per la creazione di un progetto basilare con QtCreator. Innanzitutto va aggiornato il menu di Lubit, al fine di trovare poi il collegamento a QtCreator:


Lanciamo quindi QtCreator e realizziamo il nostro primo progetto!

Creazione di un nuovo progetto

Creazione di un nuovo progetto - Non-Qt Project (non usiamo Qt adesso), C++ CMake

Definiamo una directory di destinazione dei nostri file

QtCreator ci chiede in quale directory compilare il codice (creare l'eseguibile)

QtCreator ci chiede se utilizzare un versioning tool: nessuno per adesso

Ecco il nostro codice C++, generato in automatico da QtCreator (con la scritta "Hello World")

Ecco il nostro file CMake generato in automatico da QtCreator
Cliccando sul tasto Play, il codice viene compilato ed eseguito. Se porvate a cliccare su "Application Output", troverete il messaggio "Hello World".
Se tutto va a buon fine, vuol dire che QtCreator, GCC e CMake funzionano perfettamente!
Per oggi è tutto, ci vediamo presto, per parlare della struttura di un programma C++, in cui analizzeremo linea per linea il nostro primo progetto (creato automaticamente da QtCreator come test) e definiremo una struttura organizzativa per i nostri futuri progetti, da arricchire successivamente con CMake.

Come ultima cosa, vi chiedo di partecipare al seguente questionario (della durata di meno di 30 secondi) circa gli argomenti trattati. Vi ringrazio anticipatamente per il tempo da voi dedicatomi.

A presto e buon weekend!



17 commenti:

  1. Ciao, mi sono deciso a cimentarmi nel seguire questo corso e diventare un super programmatore :-p :D

    Ma ecco già le prime difficoltà.
    Quando devo scegliere il tipo di pogetto non-Qt in Qtcreator, tra parentesi nelle opzioni c'è scritto "Qbs Build" e non "Ubuntu Cmake Build". Il codice relativo a "Hello World" non so come compilarlo ed eseguirlo perché il tasto play non risulta cliccabile.
    Grazie e a presto.
    PS.
    Io utilizzo, per ora, LinuxMint 17.1 64bit

    RispondiElimina
    Risposte
    1. Ciao Dario

      hai controllato se CMake sia installato correttamente? Quale versione di QtCreator è installata?
      Prova cosí: da Strumenti/Opzioni, scegli "Build&Run" (Compila ed esegui) e imposta il percorso di cmake sul tuo computer (di solito, /usr/bin/cmake) e vedi se ti compare la voce nel menú.

      Elimina
    2. Ciao, la versione di Qtcreator è la 3.0.1 "Based on Qt 5.2.1 (GCC 4.8.2, 64 bit)".
      Ho controllato che nella directory indicata ci fosse CMake ed è lì.
      Sono andato in Tools->Options di QtCreator, ho selezionato Build & Run ma non so esattamente dove impostare il percorso di CMake, anche se i campi disponibili sono solo 2: uno in Projects Directory (ma non credo sia questo) e l'altro in Build Directory nel cui campo ci sono una serie di istruzioni che non ben comprendo: ../build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}
      Inoltre la sezione Build & Run comprende cinque schede: General, Kits, Qt Versions, Compilers, Debuggers.

      Grazie per la pazienza.
      A presto.

      Elimina
    3. Dovrebbe esserci anche la scheda relativa a CMake

      http://tinypic.com/r/nwlkpf/8

      Prova a scaricare una versione piú aggiornata di QtCreator qui http://qt-project.org/wiki/Category:Tools::QtCreator (la 3.2.1 o la 3.3)

      Elimina
    4. Ho scaricato l'ultima versione di QtCreator (il download è stato molto più lungo) e, anche se ho superato alcuni passaggi che non sono descritti nel tuo "post" e che , per ora, non mi sono molto chiari, c'è l'ho fatta e sono pronto per la prossima puntata,
      Grazie, a presto.

      Elimina
    5. Credo tu ti riferisca all'intera suite di Qt. Hai dovuto configurare anche il percorso di installazione delle librerie e settare le variabili di ambiente?
      Potresti riportar qui gli step eseguiti su Mint, in modo da agevolare altri utenti con il tuo stesso problema?

      Io su Ubuntu 14.04 x64 ho installato la versione 5.3.2 nel seguente modo:

      #!/bin/bash

      cd /frameworks

      echo "Downloading latest Qt 5.3.2" # Requires user's interaction
      wget http://download.qt-project.org/official_releases/qt/5.3/5.3.2/qt-opensource-linux-x64-5.3.2.run
      chmod +x qt-opensource-linux-x64-5.3.2.run
      ./qt-opensource-linux-x64-5.3.2.run
      #cleanup
      rm qt-opensource-linux-x64-5.3.2.run

      echo "PATH=$PATH:/opt/Qt/5.3/gcc_64/bin:/opt/Qt/5.3/gcc_64" >> ~/.bashrc
      echo "LD_LIBRARY_PATH=/opt/Qt/5.3/gcc_64/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
      echo "export LD_LIBRARY_PATH PATH" >> ~/.bashrc

      Elimina
    6. Credo di aver istallato solo QtCreator 3.3.0.
      Nel menu di avvio in "programming" compaiono ora tutte e due le versioni di QtCreator, ma la 3.3.0 è indicata come "QtCreator (Community)", non saprei dire perchè.
      Per quanto riguarda l'inizio del mio primo progetto ho seguito le indicazioni visibili nei tuoi screenshots.
      Ora che ho ricontrollato la procedura mi sono accorto che le difficoltà che ho incontrato sono dipese dal fatto che nella versione di QtCreator 3.3.0 che ho utilizzato tutti i vari elementi visibili nei tuoi screenshots hanno una disposizione diversa e mi sono trovato un po' spiazzato. Tutto qui.
      Per installare QtCreator 3.3.0 ho sequito il link che mi hai indicato e ho scaricato il file .run relativo che ha avviato il download vero e proprio e la relativa installazione.

      Ho appena notato che hai pubblicato una nuova puntata.
      Vado ;-)

      Elimina
    7. Beh si ci sono stati dei cambiamenti da Qt Creator 3.0 a 3.3.
      La versione dei miei screenshots è quella di default dei repository di Lubit.
      Anche Qt stesso è cambiato molto, ma ne parlerò in un post dedicato

      Elimina
  2. Buon giorno, ho iniziato oggi a seguire il vostro corso ma ho incontrato subito delle difficoltà post installazione QtCreator. Ho provato lanciarlo dal menù ma non appare nulla ho provato allora lancoarlo da terminale e mi appare la seguente indicazione:
    Starting process: "/usr/bin/cmake" "--help"
    Istruzione non consentita
    Come posso rimediare?
    Grazie

    RispondiElimina
    Risposte
    1. Dopo l'installazione di un nuovo programma, Lubit 4 necessita di aggiornare le voci del menù per rendere disponibile la relativa voce (e nel caso il nuovo gruppo di programmi). Rigenera il menù cliccando sulla voce che ti appare in fondo all'ObMenù.
      Buona giornata.
      Squittymouse - Lubit Team

      Elimina
    2. Ciao Squittymouse, forse non mi sono spiegato bene: ho rigenerato il menu come da istruzioni ed infatti ho la cartella Sviluppo con Qt Creator ma se ci clicco non avviene nulla. Allora per verificare l'eventuale errore ho provato a lanciare il programma da terminale ed ecco che compaiono su due righe distinte:
      Starting process: "/usr/bin/cmake" "--help"
      Istruzione non consentita
      Cosa può essere successo e come posso rimediare?
      Grazie

      Elimina
    3. Ciao Carlo,
      da terminale intendi che hai lanciato qtcreator?
      Hai installato correttamente cmake? Cosa ti riporta il comando:

      whois cmake

      Dovrebbe comparire /usr/bin/cmake correttamente

      Elimina
    4. pardon, whereis cmake

      Quale versione di Lubit hai? Se hai una versione precedente alla 4, hai una versione di QtCreator piú vecchia

      Elimina
  3. Ciao Michele,
    ho la versione ultima di Lubit.
    Ecco la risposta al comando indicato: "cmake: /usr/bin/cmake /usr/bin/X11/cmake /usr/share/man/man1/cmake.1.gz" che non mi pare sia quanto da te indicato.
    Attendo indicazioni, Grazie

    RispondiElimina
    Risposte
    1. Ciao Carlo

      prova a reinstallare i pacchetti:

      sudo apt-get install --reinstall cmake qtcreator build-essential

      Elimina
    2. Ciao Michele,
      finalmente sono riuscito a trovare due minuti per provare le tue indicazioni.
      Purtroppo non è variato nulla.
      Se hai qualche ulteriore suggerimento ...
      Grazie

      Elimina
    3. Ciao Carlo

      quale CPU hai sul tuo computer? Leggo che Qt5 ha rimosso il supporto a CPU vecchie (della serie Pentium 4 e precedenti) poiché non supportano le istruzioni SSE2.

      Elimina