Lezione 3 di 7 · 10 min di lettura
Un progetto vero
Un file solo va bene per un saluto. Per tutto il resto c'è c3c init, la struttura standard e i comandi build e run.
Dal file singolo al progetto
Finora abbiamo compilato un file alla volta con c3c compile. Funziona, ma appena il programma cresce (più file, librerie esterne, opzioni di compilazione) diventa scomodo ripetere ogni volta tutto a mano.
C3 ha una soluzione integrata: il progetto. Un progetto è una cartella con una struttura standard e un file project.json che descrive come compilare. Il compilatore fa il resto.
Creare un progetto
Dalla cartella degli esercizi:
c3c init primo_progetto
cd primo_progettoc3c init crea una cartella con dentro tutto questo:
primo_progetto/
├─ build/ ← qui finiscono gli eseguibili e i file temporanei
├─ docs/ ← documentazione
├─ lib/ ← librerie C3 esterne (cartelle .c3l)
├─ resources/ ← immagini, suoni, file di dati
├─ scripts/ ← script di supporto
├─ src/ ← IL TUO CODICE
│ └─ main.c3
├─ test/ ← test automatici
├─ LICENSE
├─ project.json ← la configurazione del progetto
└─ README.mdSembra tanto, ma quasi tutte le cartelle sono vuote. Le uniche due cose che contano oggi sono src/main.c3 (il codice) e project.json (la configurazione). Il resto lo useremo quando servirà.
Il file principale
Apri src/main.c3. Il compilatore ci ha già messo un Hello World, con una novità:
module primo_progetto;
import std::io;
fn int main(String[] args)
{
io::printn("Hello, World!");
return 0;
}Due cose nuove:
module primo_progetto;dichiara che questo file appartiene al moduloprimo_progetto. In un progetto ogni file dice a quale modulo appartiene; i moduli sono il modo in cui C3 organizza e separa il codice. Ne parleremo a fondo in un modulo dedicato del corso.fn int main(String[] args)è la versione “completa” dimain: restituisce unint(il codice di uscita,return 0;= tutto bene) e riceveargs, la lista degli argomenti passati da riga di comando. Per ora non li useremo, ma non danno fastidio.
Compilare ed eseguire
Dentro la cartella del progetto:
c3c runProgram linked to executable 'build/primo_progetto'.
Launching ./build/primo_progetto
Hello, World!
Program completed with exit code 0.c3c run compila tutti i file in src/ e lancia il risultato. L’eseguibile finisce in build/, così la cartella del codice resta pulita.
Se vuoi solo compilare, senza lanciare:
c3c build
./build/primo_progettoE per buttare via tutto ciò che è stato compilato e ripartire da zero:
c3c clean✏️ Quiz
Sei nella cartella di un progetto e hai modificato src/main.c3. Qual è il comando più rapido per vedere il risultato?
Uno sguardo a project.json
Non serve capirlo tutto adesso, ma vale la pena sapere che esiste. Aprilo: è un file JSON, lo stesso formato usato da mezzo web.
{
"langrev": "1",
"warnings": [ "no-unused" ],
"dependency-search-paths": [ "lib" ],
"dependencies": [ ],
"version": "0.1.0",
"sources": [ "src/**" ],
"test-sources": [ "test/**" ],
"output": "build",
"targets": {
"primo_progetto": {
"type": "executable"
}
},
"opt": "O0"
}(Il file vero è pieno di commenti che spiegano ogni voce: leggili, sono utili.)
Le voci interessanti:
sources: dove cercare i file.c3(src/**= tutto ciò che sta dentrosrc, sottocartelle incluse).dependencies: le librerie esterne da usare (vuoto per ora).targets: cosa produrre. Qui un eseguibile chiamatoprimo_progetto. Un progetto può avere più target, per esempio una libreria e un programma che la usa.opt: il livello di ottimizzazione.O0= nessuna, comodo mentre sviluppi;O3= il massimo, per la versione finale.
🛠️ Esercizio · sul tuo computer
Il tuo primo progetto
- Crea un progetto chiamato
eserciziconc3c init esercizi. - Entra nella cartella e lancia
c3c run. Deve stampareHello, World!. - Modifica
src/main.c3per stampare una frase a tua scelta, e rilanciac3c run. - Lancia
c3c build, poi trova l’eseguibile inbuild/e lancialo a mano.
Se ogni passo ha funzionato, segna l’esercizio come fatto. Da ora in poi puoi decidere tu se fare gli esercizi in questo progetto o in file singoli.
Ricapitolando
c3c init nomecrea un progetto con la struttura standard.- Il codice va in
src/, gli eseguibili finiscono inbuild/. c3c runcompila e lancia;c3c buildcompila soltanto;c3c cleanpulisce.module nome;in cima a ogni file dice a quale modulo appartiene.fn int main(String[] args)è la forma completa dimain.
Bene: sai installare, scrivere, compilare, organizzare. È ora di far pensare il programma. Prossima lezione: variabili e tipi.