2013-03-24 14 views
7



Sto imparando C Programming tramite "Learn C the Hard Way". Sono attualmente all'esercizio 1, che può essere trovato qui: http://c.learncodethehardway.org/book/ex1.htmlUtilizzo di "make" C Programming (Learn C the Hard Way)

Capisco che il concetto sia coperto, ma non capisco il processo di compilazione. Durante l'utilizzo del comando "fare" nella riga di comando, perché fa questo lavoro:

$ make ex1 

E questo non funziona:

$ make ex1.c 

Sono stato in realtà solo in esecuzione il secondo comando fino ad un minuto fa. Alla fine ho capito comunque. Fino a quando l'ho fatto, ho continuato a ottenere questo messaggio di errore:

make: nothing to be done for 'ex1.c' 

Mentre questo è un solo un tecnicismo, mi piace ancora di sapere cosa sta succedendo. Grazie :)

+0

non è gcc ex1.c -o ex1? Perché gcc è il compilatore C. – Survivor

+0

Questa domanda riguarda più il programma 'make' che il linguaggio C. – aschepler

+0

Mi spiace, terrò questo a mente in tutte le domande future. Questo è stato il mio primo post su StackOverflow e le risposte sono state sorprendentemente veloci! Grazie a tutti voi ragazzi ancora una volta. – antigravityguy

risposta

12

Entrambi i lavori; fanno solo compiti diversi.

  • make ex1.c dice "usando le regole del makefile più conoscenze built-in, assicurarsi che il file ex1.c è aggiornato".

    Il programma make trova ex1.c e non ha regole per costruirlo da qualcos'altro (nessun codice sorgente di RCS o SCCS, ad esempio), quindi riporta "Niente da fare".

  • make ex1 dice "utilizzando le regole nel makefile più conoscenza integrata, assicurarsi che il file ex1 sia aggiornato".

    Il programma make rileva che conosce un modo per creare un eseguibile ex1 dalla sorgente ex1.c, così garantisce che il file sorgente ex1.c è aggiornato (esiste, quindi è fino ad oggi), e poi si assicura che lo ex1 sia aggiornato anche (il che significa che il file ex1 è stato modificato più recentemente di ex1.c). Se hai modificato ex1.c dall'ultima volta che hai eseguito make, eseguirà la compilazione per rendere ex1 più recente di ex1.c. Se la compilazione fallisce, il file ex1 non esiste, quindi la prossima volta riceverai un'altra ricompilazione. E una volta aggiornato, lo make non rigenererà ancora ex1 finché non modifichi nuovamente l'origine.

Questo è il modo in cui make è progettato per funzionare.

+0

Grazie per la risposta molto dettagliata. Questo ha senso, sebbene provenga dall'ambiente python, questo sembra davvero rigido – antigravityguy

+4

Non avevo mai visto quel sito prima, ma il titolo di Ex 2, "Make Is Your Python Now", è molto fuorviante. Ottengo quello che stanno cercando di dire, ma Make non è Python. Confrontare Make e Python è come paragonare un coltello da intaglio a una cucina. Make è specificamente progettato per aggiornare i file non aggiornati. È molto bravo in questo. Python è progettato per essere un linguaggio generico. È molto bravo in questo. Vi consiglio di ignorare questo paragone: sembra più confusionario che illuminante per me. – MadScientist

4

L'obiettivo su make di solito specifica ciò che si desidera creare o ricostruire, non ciò che si desidera utilizzare per creare qualcos'altro.

Se si digita ex1.c (e non c'è alcuna regola per auto-generarlo), fare essenzialmente solo le risposte "Sì, quel file esiste."

1

l'argomento per lo strumento make è il nome del file eseguibile che esso aiuterà a creare per voi. Non dovrebbe avere un'estensione .c.Dovresti avere scritto solo make ex1.