2009-08-27 9 views
18

Ultimamente sento il bisogno di imparare uno strumento di costruzione. Sto esaminando StackOverflow per i consigli e Gnu Make viene appena menzionato. Invece vedo Ant, Maven, CMake, Scon e molti altri. Tuttavia, quando guardo le piccole "fonti canaglia" (come in not-in-the-repo) che a volte devo compilare, richiedono tutte i passaggi make && make install.Vale la pena imparare GNU Make?

L'apprendimento è un investimento peggiore del mio tempo rispetto all'apprendimento di un altro strumento?

Se sì, perché Rendere ancora così popolare?

risposta

24

Make è lo strumento di creazione standard per tutto C/C++. Molti altri hanno fatto un passo sul piatto, ma anche quando sono stati utili e di successo, non hanno mai raggiunto l'ubiquità del fare.

Make è installato praticamente su qualsiasi macchina simile a Unix. Non importa se stai lavorando con AIX, Solaris, Irix, BSD o Linux, se c'è un compilatore installato, c'è anche make.

Alcune delle "sostituzioni" (come Automake, CMake) creano persino Makefile, che a loro volta vengono eseguiti da make.

Vorrei sicuramente consiglia di acquisire familiarità con la marca. Se gestito da qualcuno che ha speso il tempo a per imparare a fare, è uno strumento potente, che può essere utilizzato in molti modi, non necessariamente correlati allo sviluppo del software.

Anche se alla fine si utilizza un diverso strumento di compilazione, si sarà in grado di "riciclare" le lezioni apprese con la creazione, in quanto i concetti sottostanti sono abbastanza simili. E il semplice numero di progetti creati fa sì che ci sia sempre la possibilità di capire un Makefile esistente.

Una cosa, però. Get it right from the beginning.

+0

http://stackoverflow.com/questions/559216/what-is-your-experience-with-non-recursive-make è anche un buon link, anche se compare nella pagina di google che hai citato. –

+0

Diversi anni dopo, mi sono molto affezionato a [CMake] (http://www.cmake.org) e ho creato un [pacchetto pronto all'uso] (http://rootdirectory.de/wiki/ JAWS) per l'avvio di un progetto C++ con CMake. Ma continuo a dire "sì" alla domanda: vale la pena imparare GNU Make? Lo è sicuramente. Ciò non significa che non varrebbe la pena di apprendere, ad es. Anche CMake *. – DevSolar

3

Make è popolare perché è utilizzato (principalmente) per sorgenti C/C++ in progetti Linux/* nix ed è molto più vecchio di qualsiasi altro strumento che hai menzionato, quindi ha superato la prova del tempo ed è maturo. Un po 'come catrame.

Per essere onesto con te, so solo fare. Quegli altri strumenti sopra possono essere migliori, ma così tanti progetti usano solo un Makefile di base che ti conviene conoscerne almeno un po '. Non solo per i tuoi progetti sul lavoro ma anche per quelli open-source che trovi in ​​rete.

+7

È di base, autonomo (non è necessario Python, jre, php # .net con l'edizione enterprise di ruby ​​binding, qualunque sia l'esecuzione), più o meno neutro rispetto alla lingua. –

2

Dipende davvero da quanto lo si utilizzerà.

Se si lavora molto con C/C++, fare progetti, quindi sì, consiglierei di saperne di più in quanto un file di grandi dimensioni ha una curva di apprendimento più ripida rispetto ad altri strumenti di costruzione che si menzionano.

Se non si lavora con make, o si lavora in altri linguaggi come C#, Java o PHP, allora sarebbe meglio imparare gli strumenti di sviluppo pertinenti a quelle lingue.

0

Anche se si finisce per preferire un altro strumento di costruzione (personalmente sono appassionato di VS ... lo so ...) conoscere make sarà probabilmente più utile.

Make ha molte applicazioni e, anche se non è sempre l'ideale per un singolo compito, quando si tratta di nuove tecnologie è coraggioso e flessibile.

8

Penso che la ragione per cui non si vede (GNU) make menzionato è che spesso è il default; se hai una toolchain GNU, lo farai già. Quindi, molte persone che iniziano a parlare di strumenti di costruzione, parlano di qualcos'altro.

In base alla mia esperienza, make va bene, ma può essere un po 'complicato farlo fare esattamente quello che vuoi. È forse un po 'arcano, ma è provato e funziona.

1

Come tutti gli strumenti, se lo si utilizza, è necessario dedicare un po 'di tempo a per diventare ragionevolmente esperti. Inoltre, alcuni strumenti (come CMake, ad esempio) generano i makefile e potresti un giorno dover pasticciare con quei file generati.

GNU make ha un excellent manual - vale sicuramente la pena spendere un'ora o due per leggerlo.

0

Immagino che dove lavori sia probabilmente diverso, ma so che ovunque ho lavorato, sarei stato un impiegato di gran lunga meno prezioso se non avessi almeno imparato a leggere i Makefile. Anche in tutti gli ambienti Windows-VisualStudio, si presenta ogni tanto.

Ad esempio, abbiamo appena ottenuto un lavoro che comporta il trasferimento di un gruppo di vecchi codici CX/UX su Windows. Il vecchio codice è stato creato con makefile. Non c'è modo di capire il loro vecchio sistema senza sapere come leggere quei vecchi makefile.

1

Make è lo standard di fatto sui sistemi Linux, ad esempio. È uno strumento molto complesso e anche uno strumento molto potente.

È utile sapere se si sta sviluppando C o C++, in particolare se si utilizza Linux/* nix.

Una delle funzionalità di make è che è possibile impostare le dipendenze per quando ricostruire un file. Per esempio. ogni file c o C++ è incorporato in un file .obj e, alla fine, tutti i file .obj sono collegati a un eseguibile. Ma forse l'eseguibile è una libreria collegata staticamente, che è collegata a un altro eseguibile con altri file obj.

Make può assicurarsi che il tempo di compilazione sia il più breve possibile, poiché è possibile definire che un file c deve essere compilato solo se esso o qualsiasi file di intestazione dipendente sono più recenti del file obj. Pertanto, qualsiasi passaggio di compilazione o collegamento viene eseguito solo se i file di origine correnti per il passaggio sono più recenti rispetto al file di destinazione.

Se si sta sviluppando ad esempio in C#, non è necessario questo tipo di controllo delle dipendenze perché tutti i file .cs vengono compilati contemporaneamente in un singolo file eseguibile.

Quindi la conclusione è che si dovrebbe usare uno strumento di compilazione che sia adatto per la scelta del linguaggio di programmazione.