Quanto è importante imparare i makefile? [chiuso]


12

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 imparare come crearli da solo. Per "vale la pena imparare" intendo, dovrei abbandonare tutto e imparare a scriverli prima di continuare a imparare c ++? Impararli sarà davvero necessario? In tal caso, dovrei conoscerli (sintassi generale e capire come funzionano ecc.) O davvero imparare a scriverli?


1
la maggior parte dei progetti open source fa un uso pesante dei makefile in un modo o nell'altro. Quindi, sì, dovresti imparare come funzionano i makefile. Scriverli a mano è un'altra storia e dovrebbe essere evitato preferendo generarli con qualche strumento tranne che hai pochissimi file o puoi usare regole generiche / implicite e altre tecniche simili
permeakra,

se vuoi che altri compilino il tuo sorgente su Linux e altri sistemi operativi basati su Unix, devi impararli.

Potresti imparare le basi di makefile, dipendenze e sostituzioni ecc., In meno tempo che ti ci vorrà per leggere tutte le risposte a questa domanda :)
JohnB,

Risposte:


14

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

Per "vale la pena imparare" intendo, dovrei abbandonare tutto e imparare a scriverli prima di continuare a imparare c ++?

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

Ma no, non penso che tu debba farlo.

Impararli sarà davvero necessario?

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

In tal caso, dovrei conoscerli (sintassi generale e capire come funzionano ecc.) O davvero imparare a scriverli?

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

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

Se ti approfondisci, imparerai che ci sono 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, autoconfe così via, per generare i makefile, ecc. In questo caso, gran parte della complessità relativa alla versione / piattaforma viene gestita dietro le quinte .


Infine, hai taggato la domanda con "java". La mia opinione è che non dovresti usare makeper costruire applicazioni Java (a meno che tu non stia costruendo anche librerie di codici nativi). Esistono strumenti di compilazione specifici di Java che sono molto più facili da usare ... e fanno un lavoro migliore di make.


8

Se stai lavorando con sistemi operativi open source o simili a Unix, sì. Prendi il cuore però, non sono così complicati. L'apprendimento maketi farà risparmiare molto tempo nel lungo periodo.


Imparare per leggere o imparare per scrivere?

Tutti e due. Vuoi sapere come leggerlo in modo da poter eseguire il debug dei problemi del software che usi o scrivere in modo da poter creare il tuo.
EhevuTov,

Quindi non sono d'accordo con la parte scritta. Ci sono molti altri - probabilmente molto meglio - modi per automatizzare le build. Scrivere makefile effettivamente utili è tutt'altro che banale e non necessario.

3

I makefile sono importanti sui sistemi UNIX (ad es. AIX, Linux, OS X). Tuttavia, penso che la loro importanza assoluta "devi saperlo" è diminuita negli ultimi anni. Ad esempio, non li trovi davvero nello sviluppo di Windows (Visual Studio, ecc.) E XCode (su OS X) utilizza un sistema completamente diverso. Non mi piace molto Java, ma lì penso che usino file di formica e quant'altro.

Esiste un sistema molto interessante chiamato CMake che genera file di build nativi per il sistema operativo su cui ti capita di essere in esecuzione. Ad esempio, se scrivi le specifiche del tuo progetto in CMake, puoi creare un progetto di compilazione di Visual Studio su Windows, un progetto XCode su Mac e un Makefile su Linux. In un certo senso, CMake sostituisce autoconf e automake.

Di solito creo i file CMake per i miei "grandi progetti", ma conosco Make nel caso in cui volessi scrivere un Makefile veloce "fallo". È positivo per la tua cultura, perché ci sono tonnellate e migliaia di librerie software che usano Makefile e dovrai inevitabilmente modificare i compilatori specifici e le posizioni delle librerie. Ma scoprirai che grandi progetti (come KDE) stanno migrando verso CMake e simili poiché Make ha alcune limitazioni che allevano la loro brutta testa quando i progetti si complicano.


Imparare CMake sarà ordini di grandezza più vantaggiosi. I makefile possono essere visti come dettagli di implementazione - non preoccuparti di impararli (fino a quando non sono costretti a farlo), proprio come i file di progetto di Visual Studio.

2

Sono incline a pensare che i makefile siano un sistema terribile. Dovresti imparare la sintassi generale in modo da poter modificare un makefile esistente. Ma non penso che sia utile imparare tutto a riguardo o crearne uno da zero.


Ti interessa spiegare perché i makefile sono un sistema terribile? Rispetto a cosa?
JonnyJD il

@JonnyJD: Una cosa è che non credo che un buon sistema di compilazione dovrebbe avere un file make in ogni sottodirectory. Ma è male perché non è molto più facile da usare quindi scrivere un file bat che in realtà sta dicendo qualcosa.

Sembra più che non ti piaccia generare manualmente i file di build. Che di per sé non è un grosso problema. I makefile sono una variante che dovrebbe essere possibile leggere e scrivere manualmente. (modulare, semplifica semplicemente il rilevamento delle dipendenze rispetto a bash / bat) La parte automatizzata è automake. L'unica cosa che in realtà è molto diversa è specificare le dipendenze in una GUI e salvare tutto questo in un file di progetto. O quale sistema di build è tanto meno terribile?
JonnyJD il

2

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

Con un adeguato livello di comprensione, è spesso possibile migliorare significativamente le prestazioni (build più veloci, ecc.). Tuttavia, a meno che tu non sappia davvero cosa sta succedendo, sei più propenso a FUBAR, quando giocherelli con un file autogen.

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


2

Essere in grado di utilizzare con successo makeo qualcosa del genere consente di selezionare la casella "capisce come modellare le dipendenze tra le parti di un programma composto da più di un modulo".


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 di codice in questo modo e amplierà i tuoi 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 decidi di imparare a programmare nel mondo Java o Ruby.
  3. Molti IDE hanno file magici che contengono informazioni di configurazione per aiutarti a costruire il tuo software. Se non mi credi, prova a scrivere uno script per creare il tuo software senza l'IDE. Quando scrivi i tuoi Makefile, diventi molto consapevole delle dipendenze tra il tuo codice, le librerie e le variabili di ambiente. Man mano che i sistemi diventano più grandi, questo risulta essere uno strumento utile per il debug del sistema.

0

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

Ciò 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 compilazione per il tuo progetto e la capacità generale di compilare manualmente piccoli progetti (come in "digitare comandi su un terminale").

Tendo a pensare che creare (semplici) Makefile sia 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 prevedi che nessun altro compili il tuo codice, sentiti libero di compilarlo come preferisci.

Se vuoi programmare il compilatore agnostico (come in "lascia che gli altri decidano quale compilatore o IDE vogliono usare"), allora dovresti imparare un altro sistema di compilazione piuttosto che lasciare che il tuo IDE "gestisca".

Se vuoi programmare per piattaforme diverse, allora devi certamente usare un sistema di build diffuso.

Ciò non significa ancora che devi sapere come i Makefile generati automaticamente funzionano nel dettaglio. Devi solo sapere come funzionano i file di input per il sistema di compilazione. Questi a volte hanno una sintassi simile a volte.


Personalmente mi piacciono molto i Makefile e li uso per molte cose. Non solo compilando codice. Creo un Makefile per ogni pdf più grande che creo (con LaTeX) e per ogni progetto di cui ho bisogno per automatizzare un paio di attività (costruzione, packaging, upload, 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 IDE diverso da vim (potente editor di testo) e strumenti console. Questo potrebbe essere molto diverso per te.

Se ti sei mai lamentato di dover eseguire diversi comandi ricorrenti solo per "aggiornare" / pacchetto / upload / .. un "progetto", imparare a scrivere Makefile potrebbe essere utile per te.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.