Domanda

Sto cercando di imparare GNUMake per un piccolo progetto a cui sto lavorando. Finora, anche il "base" i tutorial sembrano piuttosto approssimativi e devo ancora dare un senso alla sintassi del makefile.

Qualcuno ha delle buone risorse per un principiante assoluto per familiarizzare con GNUMake?

È stato utile?

Soluzione

La guida definitiva è http://www.gnu.org/software/ rendere / manuale / make.html
Esiste un libro di O'tilly "Gestione dei progetti con GNU Make" che ha più spiegazioni. Puoi anche usare le precedenti edizioni, non trattano specificamente GnuMake ma sono molto più sottili.

Make è un segreto sporco tra gli sviluppatori: nessuno di noi lo capisce, prendiamo in prestito uno script di make da qualcun altro e lo cambiamo. Immagino che una sola sceneggiatura sia mai stata scritta da zero (probabilmente dal creatore dello strumento).

Quando devi fare qualcosa di più del semplice esempio, la maggior parte delle persone passa a un sistema di build più moderno come Ant o usa il proprio sistema in Perl / Python / etc.

Altri suggerimenti

Le caratteristiche più comunemente usate di make possono essere suddivise in un paio di concetti, obiettivi, dipendenze e variabili semplici.

I target sono le cose che vuoi costruire, ma i comandi sotto un target possono essere comandi o script del compilatore. Generalmente ogni target si riferisce a un modulo nel tuo codice, ma puoi renderli così granulari come desideri per il tuo progetto.

Le dipendenze sono file o altri target nel tuo progetto. Il miglior esempio di questo è per un progetto C in cui stai costruendo un file binario da un gruppo di file oggetto. Ogni file oggetto dovrà esistere prima di poter creare il binario, quindi make attraverserà i tuoi target fino a quando tutte le dipendenze non saranno state completate, quindi eseguirà il comando per il target complessivo.

Le variabili non sono sempre necessarie, ma sono piuttosto utili per gestire cose come i flag del compilatore. Gli esempi canonici sono CC e CCFLAG che faranno riferimento al compilatore che stai usando, ad esempio gcc e i flag come -ansi -Wall -o2.

Un paio di suggerimenti e trucchi più generali:

  • I comandi devono essere preceduti da un carattere [tab], o non verranno eseguiti, questa è solo una vecchia reliquia di make, non ricordo perché questo sia.
  • Per convenzione, potresti voler includere un target all per specificare quale target dovrebbe essere il default. Questo è utile quando hai un makefile complesso e c'è un target particolare che vuoi sempre essere il default.
  • Il tuo makefile dovrebbe essere chiamato makefile o Makefile, ma se vuoi chiamarlo come altro, usa $ make -f [makefilename]
  • Utilizza sempre la sintassi di espansione della variabile completa, ad esempio $ (VARIABLE) o make potrebbe non generare i comandi desiderati.
  • make può funzionare in modo ricorsivo, quindi se hai un gruppo di sottomoduli nel tuo progetto che vivono all'interno di directory, puoi chiamare make sul makefile della sottodirectory da make per crearli ciascuno.
  • Se hai un progetto davvero complicato che necessita di script di installazione, ecc. probabilmente vorrai anche investigare su autotools che generano il makefile per te e fanno un sacco di trucchi per verificare l'esistenza della libreria e altri problemi di portabilità.

"Gestione dei progetti con GNU Make, 3a edizione" è posto sotto "quotazione GNU Free Documentation License" e può essere legalmente letto online gratuitamente: link .

Concordo con il suggerimento del libro di O'Reilly.

Per alcuni suggerimenti utili, trucchi e approfondimenti su Dai un'occhiata al Mr . Crea articoli

mgb: è anche peggio. Una volta ho scritto da zero un complicato sistema di creazione (poche migliaia di file, cinquanta o cento directory, quattro o cinque compilatori e destinazioni di compilazione incrociata, 2 sistemi operativi, ecc.). Mi sono seduto e ho imparato prima a fare il gnu dentro e fuori, ho progettato il sistema, ho giocato prima con un prototipo. Siamo rimasti tutti molto contenti del risultato.

Ma è stato anni fa. Sai come li scrivo oggi? Allo stesso modo in cui descrivi. È abbastanza complicato e i dettagli della sintassi sono abbastanza oscuri rispetto a quando non lo fai abbastanza regolarmente non riesci a ricordare i dettagli. Proprio come qualsiasi altra lingua con sintassi non intuitiva e alcune regole bizzarre, immagino.

Non sono un grande fan del sistema di informazioni GNU, ma ho trovato le pagine di informazioni GNU molto utili. Una volta che conosci i concetti di base e approssimativamente che tipo di cose sono disponibili, ho scoperto che le pagine di informazioni sono il modo più rapido per fare riferimento ad informazioni come le funzioni predefinite, per esempio.

(Dimentica il programma GNU info e utilizza ad es. pinfo invece.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top