La generazione di un programma inizia con la scrittura di un file sorgente in un qualche linguaggio di programmazione (es. C++) e termina con la creazione di un file eseguibile (cioè di un programma in linguaggio macchina che può essere eseguito direttamente dal computer).
Le fasi necessarie sono schematizzate in figura:
Il significato dei diversi blocchi in figura è il seguente:
In dev-C++ un progetto (project) è un file con estensione .dev che contiene le regole per la costruzione di un file eseguibile.
Tali regole devono specificare:
Si noti che fra i file da linkare dev'essere presente solo un unico programma main. Gli altri file devono eventualmente contenere le funzioni che il programma utilizza.
Come già abbiamo visto il dev-C++ è un ambiente integrato che contiene al proprio interno tutti gli strumenti necessari per creare un programma e in particolare contiene:
Gli strumenti di compilazione, linking ed esecuzione sono accessibili dal menu Esegui, come mostrato in figura:
Il significato delle diverse opzioni è il seguente:
Un caso particolare interessante è la possibilità di includere in un progetto non solo file sorgenti (con estensione .cpp) ma anche file oggetto (.o) precedentemente compilati.
In altre parole è possibile per esempio usare nel proprio progetto un file contenente funzioni di cui si dispone solo della versione compilata, senza avere accesso al file sorgente. Ciò è utile per esempio quando si vuole condividere le proprie funzioni con altre persone, senza però dare a queste ultime l'accesso al proprio file sorgente (in sostanza si vuole che altri possano usare le nostre funzioni senza però poter vedere come sono state scritte).
Per includere file oggetto in un progetto bisogna accedere alle opzioni del menu progetto (Progetto/Opzioni del Progetto) e quindi alla scheda Parametri. Con il pulsante Aggiungi libreria o oggetti è infine possibile cercare i file .o e aggiungerli al progetto:
Osserviamo che anche nel caso di funzioni precompilate, è necessario includere nel file contenente il main il prototipo delle funzioni usate.
Un modo un po' più efficiente ed elegante per distribuire il codice delle proprie funzioni (senza rendere accessibile il sorgente è quello di creare una library).
1) Per fare questo basta creare un nuovo progetto e scegliere l'opzione Static Library come in figura (il nome funz_binarie è un esempio):
2) A questo punto bisogna aggiungere al progetto tutti i file sorgenti .cpp che contengono le funzioni che dovranno fare parte della library. Per esempio:
3) Infine bisogna compilare la library col menu Esegui (che in questo caso non contiene le opzioni Esegui e Compila & Esegui perché una library è una collezione di funzioni, senza un main e non può essere eseguita direttamente)
4) Scegliendo dal precedente menu l'opzione Compila o Riassembla tutto viene generato un file con estensione .a (nel nostro caso si chiama funz_binarie.a) contenente al proprio interno tutte le funzioni dei file caso.cpp e inpout.cpp.
5) A questo punto il file di libreria può essere utilizzato in un nuovo progetto con le stesso modalità viste sopra in Linkare un file oggetto precompilato (basta selezionare il file .a nella scheda Parametri delle Opzioni del Progetto).
Rispetto all'uso di semplici file oggetto, le library sono raccolte di funzioni con un indice di accesso che, in teoria, permette un accesso più veloce alle funzioni stesse. Questo era particolarmente vero nel caso dei vecchi linker i quali, nel caso di file oggetto, linkavano tutte le funzioni contenute nell'oggetto, indipendentemente dal fatto che esse fossero usate o meno dal programma. Con i programmi linker moderni invece le funzioni vengono aggiunte all'eseguibile solo se effettivamente usate (e questo accade sia con il file oggetto che con le library).
In buona sostanza non esiste più molta differenza pratica fra usare file precompilati o library statiche in dev-C++.
Sito realizzato in base al template offerto da
http://www.graphixmania.it