Quanto è importante imparare i makefile? [chiuso]

11

Lavoro in c ++ principalmente come hobby (sono ancora a scuola e quindi non ho un vero lavoro). Gli IDE generano il makefile per me e quindi mi chiedo se valga la pena di imparare a crearli da solo. Con "vale la pena imparare" intendo, dovrei lasciare tutto e imparare come scriverli prima di continuare ad imparare c ++? Sta imparando che saranno veramente necessari? In tal caso, dovrei imparare a conoscerli (sintassi generale e capire come funzionano, ecc.) O davvero imparare a scriverli?

    
posta sinθ 26.08.2012 - 00:08
fonte

8 risposte

14

Sì, vale sicuramente la pena capire come funzionano i Makefile. Potrebbe non essere rilevante per te in questo momento (perché stai utilizzando un IDE che li genera), ma è probabile che la conoscenza sarà utile in futuro.

By "worth learning" I mean, should I drop everything and learn how to write them before continuing to learn c++?

Francamente, questa è una bizzarra idea di "vale la pena imparare" ...

Ma no, non penso che tu debba farlo.

Is learning them going to be really necessary?

Non possiamo prevedere se avrai davvero bisogno di questa conoscenza in futuro. Dipende se si continua con la programmazione in C ++ e in quale contesto lo si fa.

If so, should I learn about them (general syntax and understanding how they work etc.) or really learn how to write them?

Consiglierei entrambi. Se non puoi scrivere un Makefile, è discutibile che tu sappia cosa sta succedendo.

C'è un altro punto di vista che dice che troppa conoscenza non è utile.

Se ci si immerge profondamente in questo, si impara che esistono molte versioni diverse di Make e che scrivere un Makefile complicato che funziona con più versioni di Make su più piattaforme è ... difficile. Tuttavia, nel mondo open source, è "best practice" utilizzare strumenti come automake , autoconf e così via per generare i makefile, ecc. Se lo fai, molta della complessità relativa alla versione / piattaforma viene trattato dietro le quinte.

Infine, hai taggato la domanda con "java". La mia opinione è che non si dovrebbe usare make per costruire applicazioni Java (a meno che non si stiano creando anche librerie di codice native). Esistono strumenti di sviluppo specifici di Java che sono molto più facili da usare ... e fanno un lavoro migliore di make .

    
risposta data 26.08.2012 - 04:41
fonte
8

Se lavori con sistemi operativi open source o Unix, sì. Abbi coraggio, non sono così complicati. Imparare make ti farà risparmiare molto tempo a lungo termine.

    
risposta data 26.08.2012 - 00:53
fonte
3

I makefile sono importanti sui sistemi UNIX (ad esempio AIX, Linux, OS X). Tuttavia, penso che la loro importanza assoluta "devi saperlo" sia diminuita negli ultimi anni. Ad esempio, non li trovi realmente nello sviluppo di Windows (Visual Studio, ecc.) E XCode (su OS X) utilizza un sistema completamente diverso. Non sono molto in Java, ma penso che usano i file ant e quant'altro.

C'è un sistema molto interessante chiamato CMake che genera file di build nativi per il sistema operativo su cui si sta eseguendo. Ad esempio, se si scrivono le specifiche del progetto in CMake, è possibile creare un progetto di build di Visual Studio su Windows, un progetto XCode su Mac e un Makefile su Linux. In un certo senso, CMake sostituisce autoconf e automake.

Generalmente creo file CMake per i miei "grandi progetti" ma so Make nel caso in cui voglia scrivere un makefile veloce "just get it done". Fa bene alla tua cultura culturale, perché ci sono tonnellate e tonnellate di librerie software che usano Makefile, e dovrai inevitabilmente modificare i compilatori e le posizioni delle librerie specifiche. Ma scoprirai che grandi progetti (come KDE) stanno migrando verso CMake e simili dal momento che Make ha alcune limitazioni che fanno da contraltare quando i progetti si complicano.

    
risposta data 26.08.2012 - 23:43
fonte
2

Sono un pregiudizio perché penso che i makefile siano un sistema terribile. Dovresti imparare la sintassi generale in modo da poter modificare un makefile esistente. Ma non penso che imparare tutto su di esso, né renderne uno da zero sia utile.

    
risposta data 26.08.2012 - 05:32
fonte
2

Come per molti aspetti dell'output IDE, un tipico makefile generato automaticamente è spesso strutturato in modo inefficiente.

Con un livello appropriato di comprensione, è spesso possibile migliorare significativamente le prestazioni (build più veloci, ecc.). Tuttavia, a meno che tu non sappia veramente cosa sta succedendo, è più probabile che FUBAR, quando armeggia con un file autogen-ed.

Consiglio vivamente di essere in grado di capire cosa sta succedendo ... se successivamente decidi di iniziare a modificarne uno esistente o di crearne uno tuo, è un problema separato.

    
risposta data 26.08.2012 - 11:07
fonte
2

Essere in grado di usare con successo make o qualcosa di simile ti permette di controllare il box "comprende come modellare le dipendenze tra parti di un programma composto da più di un modulo".

    
risposta data 27.08.2012 - 00:01
fonte
1

Imparare a scrivere Makefile è una buona idea per una serie di motivi.

  1. Make è un linguaggio che consente di codificare le dipendenze tra i componenti tramite regole. Avrai molta esperienza con la scrittura del codice in questo modo e amplia gli strumenti per pensare a risolvere i problemi di programmazione.
  2. I principi che impari con Make possono essere usati con Ant, Maven e Rake se scegli di imparare a programmare nel mondo Java o Ruby.
  3. Molti IDE hanno file magici che contengono informazioni di configurazione per aiutarti a creare il tuo software. Se non mi credi, prova a scrivere uno script per creare il tuo software senza IDE. Quando scrivi i tuoi Makefile, diventi molto consapevole delle dipendenze tra il tuo codice, le tue librerie e le tue variabili d'ambiente. Man mano che i sistemi diventano più grandi, questo risulta essere uno strumento utile per il debug del sistema.
risposta data 23.12.2012 - 04:59
fonte
0

Dovresti sempre cercare di capire il sistema di build che stai utilizzando.

Questo non significa necessariamente che devi essere in grado di creare manualmente tutti i file di build. La parte importante è capire cosa sta facendo il sistema di generazione per il tuo progetto e la capacità generale di compilare piccoli progetti manualmente (come in "comandi di digitazione su un terminale").

Tendo solo a pensare che creare (semplici) Makefile è il passo più semplice per capire cosa sta succedendo, ma potresti avere altri mezzi per capire come costruire le cose.

Perché / quando imparare i Makefile

Se continui a programmare solo per Windows e non ti aspetti che nessun altro possa compilare il tuo codice, sentiti libero di compilare il codice come preferisci.

Se vuoi programmare il compilatore agnostico (come in "lascia che altri decidano quale compilatore o IDE vogliono usare"), allora dovresti imparare un altro sistema di build che lasciare che il tuo IDE "si occupi di esso".

Se vuoi programmare su piattaforme diverse, devi certamente usare un sistema di compilazione molto diffuso.

Questo non significa che devi sapere come funzionano i Makefile generati automaticamente. Devi solo sapere come funzionano i file di input per il sistema di compilazione. A volte capita di avere una sintassi simile.

Personalmente mi piacciono molto i Makefile e li uso per molte cose. Non solo compilare il codice. Creo un Makefile per ogni pdf più grande che creo (con LaTeX) e per ogni progetto che ho bisogno di automatizzare un paio di attività (costruzione, imballaggio, caricamento, aggiornamento delle dipendenze dai repository di origine, pull / push backup manuali)

Tuttavia, sto lavorando molto sul terminale e sto lavorando con Linux. Non uso quello che chiamereste un IDE diverso da Vim (potente editor di testo) e strumenti di console. Questo potrebbe essere molto diverso per te.

Se ti sei mai lamentato di dover eseguire comandi di ri-elaborazione diversi solo per "aggiornare" / pacchetto / caricare / .. un "progetto", quindi imparare come scrivere Makefile potrebbe essere qualcosa di utile per te.

Se hai e usi strumenti / GUI / IDE per tutto, quindi potresti non ottenere nulla da quella conoscenza.

    
risposta data 23.12.2012 - 04:38
fonte

Leggi altre domande sui tag