• Diventa Fan!
  • Seguici Twitter
  • Seguici su Google+

Linux: Cmake e CMakeLists.txt… a cosa servono e come si usano?

Scritto in Backtrack, Debian, Fedora, Linux, Mac, Slackware, Software, Ubuntu, Windows - Da Jessica Lambiase - domenica 9 gennaio 2011 - 3 Commenti

Non chiedetemi perchè, non chiedetemi come, non chiedetemi quando e, soprattutto, non chiedetemi chi (altrimenti vado in bestia) ha svuotato una chiavetta USB sul mio notebook e mi ha lasciato dei files altamente sospetti. Dò uno sguardo generale con il mitico od per vedere cosa c’è dentro.. non ci sono tracce o firme pericolose, posso provare ad aprirli. Ma… con cosa? Sono dei files senza estensione, con un’icona stramba mai vista prima… vabbè, una botta di «file» e… dopo mezzo secondo scopro che corrispondono a «DICOM medical imaging data». Bene, mio padre ha messo le zampette sul mio computer, domani gliele mozzo.

In tutti i casi, presa dalla curiosità, googlo un pochettino e scarico il sorgente di un’applicazione per visualizzare queste “immagini”. Apro la mia adorata shell, estraggo il file, dò un ls per vedere come installarlo e… doh, mi trovo un output di questo tipo:

malefika@compaq:~/Scaricati/nukak3d-4.6.0$ ls
CMakeLists.txt CMakeModules doc include packaging resources src

..Non avendo mai visto nulla del genere mi si disegna immediatamente sul volto l’espressione di un punto interrogativo. Tento di dare un make e un qmake… ma senza successo. Sospettavo di dover utilizzare qualche altra diavoleria di make, e i miei sospetti hanno trovato conferma due secondi dopo aver googlato ancora: la diavoleria che avrei dovuto scaricare si chiamava cmake.

Vabbè, tentativo per tentativo, dò un bel

sudo apt-get install cmake

…e funziona! Una volta terminato il processo d’installazione dò un bel “man cmake” e scopro che il comando esatto da dare è – all’interno della directory che contiene il sorgente del programma -

cmake CMakeLists.txt

All’inizio le cose non possono sempre andar bene: questo signor cmake mi avvisa che non trova alcune librerie necessarie per il processo di “compilazione” dell’applicazione, librerie che provvedo prontamente ad installare (devo essere onesta, l’output di errore è stato chiarissimo ed ho scaricato le dipendenze a colpo sicuro).
Dopo aver scaricato il $miliardodirobacheglimancava riprovo a dare il comando: funziona perfettamente, e termina la sua esecuzione con un messaggio del tipo: — Build files have been written to: …/nukak3d-4.6.0.
Dò un «ls» per vedere cosa è successo e… sorpesa delle sorprese, mi è apparso un Makefile! Ormai forte della mia conquista dò di «make && sudo make install» e…miseria, mi ritrovo il programma installato e riesco a visualizzare le immagini (di cui ho capito davvero ben poco, ma questi son dettagli)!

In generale, quando vi ritrovate di fronte ad un sorgente che ha al suo interno un CMakeLists.txt procedete come segue:

  1. Installate (se non lo avete già) il programma cmake, con il comando

    sudo apt-get install cmake

  2. Portatevi, da terminale, nella directory in cui avete estratto il sorgente dell’applicazione che vi interessa
  3. Avviate il processo di compilazione con il comando

    cmake CMakeLists.txt

  4. Installate le eventuali dipendenze che vi saranno segnalate in output
  5. Terminate il processo di compilazione ed installazione come di consueto, con i comandi

    make

    ….ed eventualmente (visto che potrebbero essere generati anche degli eseguibili e potreste non averne bisogno)

    sudo make install

  6. …ora potrete utilizzare la vostra applicazione!

A meno che non vi siano particolari richieste (di cui per il momento sono all’oscuro) da parte di cmake… la cosa funziona!

Scommetto che vi state chiedendo perchè non si usi il classico ./configure. Bene, a grandi linee cmake fa esattamente la stessa cosa dello script di configurazione: verifica l’ambiente di sviluppo, verifica la presenza/assenza dei componenti necessari.. e, infine, procede alla creazione del makefile. Con una sola, enorme differenza, però: Cmake non funziona soltanto su Linux… con delle precise direttive può generare anche files eseguibili o installers per Windows o addirittura per Mac (infatti Cmake è disponibile per tutti e 3 i sistemi operativi).

In parole povere cmake è un sistema di compilazione che utilizza dei files di configurazione assolutamente indipendenti dalla macchina su cui l’applicazione sarà compilata: sarà cmake stesso ad occuparsi di creare – per l’applicazione da compilare – il Makefile (per Linux), il file eseguibile (per Windows), o il file .dmg (per Mac).

Utilizzare cmake non è difficile, ma scrivere degli script di configurazione per farlo funzionare si: ecco perchè sorgenti del genere si usano prevalentemente per il testing.

Non è detto, però, che cmake venga utilizzato soltanto per il testing: ho trovato un programma che ha bisogno di essere compilato con quella roba!

Per fortuna, direi, visto che ho imparato un’altra cosa utilissima! E, francamente, spero un giorno possa tornare utile anche a voi! Vi lascio qui sotto il link alla pagina ufficiale di cmake, dove potrete trovare spiegazioni più dettagliate riguardo a questo bizzarro – ma efficientissimo – metodo di compilazione.

  • roberto

    ma come Jessica, allora non usi Linux!
    Te lo consiglio, così puoi mettere una psw su “utente Jessica”!!!

    • http://www.chimerarevo.com Jessica Lambiase

      !!!!

  • Neri G

    Bell’articolo, comunque, a chi interessasse (a me che sono un odontoiatra per esempio, ma anche agli altri medici), nei repo di ubuntu sono già presenti diversi pacchetti per poter visualizzare le immagini in formato dicom, io consiglio Aeskulap, che ha anche altre funzioni di editing, anche se in generale, le immagini in formato dicom, tipo le TC, vengono fornite già su cd, con relativo viewer, purtroppo solo per windows, come al solito…