I makefile sono importanti?

2

Attualmente sto lavorando a una piccola biblioteca come progetto per hobby. Sono l'unico che attivamente codifica per questo, ma alcuni dei miei amici hanno espresso interesse a partecipare al futuro.

Quando utilizzo la libreria per i miei scopi, di solito aggiungo i file sorgente appropriati al mio progetto usando un IDE. (Ad esempio, trascinando un file .h e .cpp in Xcode.) Man mano che la libreria cresce in dimensioni e complessità, ho cercato di passare ad un approccio più professionale all'organizzazione.

Ho preso in considerazione l'idea di creare una sorta di makefile che i futuri partecipanti possano utilizzare per compilare la libreria in un file di libreria "monolitico". Questo potrebbe essere utile anche a me, dal momento che codice su più computer. Vale la pena fare una tale impresa?

Nota: ho provato a guardare la libreria Boost per vedere come fanno le cose, ma è piuttosto difficile navigare senza alcuna esperienza precedente e ho avuto problemi a dare un senso alla struttura.

    
posta Maxpm 06.05.2011 - 22:35
fonte

6 risposte

8

Sì.

È probabile che il tuo IDE di scelta cambi nel corso della vita del codice, specialmente se lasci il codice e torni ad esso tra 5-10 anni.

È anche utile quando condividi il codice per rendere più semplice per gli altri il loro strumento preferito, piuttosto che imporre involontariamente il tuo ambiente.

Vale la pena esaminare automake / autoconf come questi aiutano a rendere il codice portabile su sistemi UNIX-like (incluso OSX, che è essenzialmente BSD con librerie proprietarie / layout di filesystem), e possibilmente Windows.

Assicurati di pensare a come (o se) vuoi concedere in licenza il codice prima di condividerlo con i tuoi amici - non puoi imporre una licenza dopo averlo distribuito, il che potrebbe essere rilevante se commercializzi il progetto o vuoi smetti di pubblicizzarlo con altri.

    
risposta data 06.05.2011 - 22:56
fonte
2

Sì, soprattutto se consideri tale opzione - fallo.

I metodi di implementazione automatica aumentano enormemente l'esperienza complessiva per te e per gli altri. Tieni a mente che Makefile funziona solo con i sistemi UNIX e UNIX (http://en.wikipedia.org/wiki/Unix-like). Quindi l'utente di Windows non sarà in grado di usarlo.

Certo nel mio caso da quando usavo buildout e Makefile, [Makefile] agisce solo come una sorta di alias intelligente per lunghi o un gruppo di comandi, quindi gli utenti in Windows si limitano a compilare e stanno inserendo comandi più lunghi in cmd. Ma torniamo alla domanda: l'automazione in questo caso vale ancora il tempo per noi dal momento che server e collaboratori di distribuzione di maggioranza utilizzano Linux e ogni volta che distribuiamo il tempo è dimezzato e questo per coloro che hanno creato il sistema e lo sanno.

Quindi il mio suggerimento sarebbe, guarda quali metodi potrebbero ridurre il tempo di implementazione / configurazione il più possibile e quanto velocemente potresti configurarlo. In questo caso, Make file credo sarebbe un'ottima opzione. Cerca di creare qualcosa che ti piacerebbe ottenere. Personalmente mi piacerebbe avere l'installazione one-command e una buona documentazione. Dubito che altri vorrebbero qualcos'altro.

    
risposta data 06.05.2011 - 23:04
fonte
1

Sì, costruire strumenti di automazione sono estremamente importanti per qualsiasi progetto complesso.

I file di progetto che i tuoi usi IDE possono essere utilizzati da altri strumenti di automazione build, che funzionano bene per molte situazioni. In questi giorni i progetti di Visual Studio possono essere compilati da uno strumento autonomo MSBuild, che è utile per molte attività di automazione.

    
risposta data 06.05.2011 - 22:39
fonte
1

Non so se supporta XCode poiché non lo uso ma, almeno per me, il Santo Graal è un "sistema di meta-build", cioè. un'applicazione che costruisce Makefile, VS Projects, ovunque sia la piattaforma che sto usando o il porting del mio progetto. Dopodiché puoi costruire il progetto usando la modalità nativa.

Quindi mantieni solo un progetto per questo sistema di meta-build e genera makefile nativi (o ...) per la piattaforma che stai utilizzando.

Ecco come vengono solitamente costruiti i progetti Qt.

Usavo molto spesso qmake, da Nokia (Trolltech). Penso che CMake sia il sistema di compilazione più efficace che funziona nel modo in cui ho descritto.

Ho visto autoconf suggerito in un'altra risposta, beh, non credo che qualcuno abbia esperienza del mondo reale con esso e con sostituti e gli piaccia. È disordinato, almeno per me. Stai alla larga.

    
risposta data 07.05.2011 - 02:12
fonte
0

Poiché altri hanno già risposto sulla parte di automazione della build, voglio solo aggiungere che, se la tua libreria cresce e vuoi condividere il codice, dovresti dare un'occhiata al controllo della versione come git o svn.

    
risposta data 07.05.2011 - 01:20
fonte
0

L'utilizzo delle librerie è una soluzione più completa. Intendo dire che tutto è all'interno della libreria e tutto ciò che devi fare è #include i file header necessari per le dichiarazioni. L'unica cosa che devi ricordare è impostare i percorsi per i file di intestazione e la libreria nel tuo makefile del progetto e includere un comando linker per collegare il tuo programma alla libreria. Questo approccio manterrà il makefile del programma molto più pulito poiché ci saranno meno file. Alla fine il linker inserirà nell'eseguibile finale solo il codice richiesto. Se invece si includono manualmente i file, è possibile collegare molto più codice rispetto a quello richiesto. Potrebbe sembrare un po 'complicato avere due progetti (libreria e programma) ma credo che alla fine ritorni.

    
risposta data 06.05.2011 - 22:50
fonte

Leggi altre domande sui tag