Domanda

Ho deciso di lasciare indietro l'installazione di Windows e ora eseguo Debian come sistema operativo predefinito. Ho sempre codificato in Windows e in particolare con Visual Studio. Attualmente sto cercando di abituarmi a compilare il mio codice su Linux.

Anche se ho ancora molta documentazione da leggere e non mi aspetto che voi ragazzi mi rendiate troppo facile per me, sarebbe comunque bello avere dei suggerimenti su da dove cominciare. Ho alcune domande specifiche, ma sentiti libero di suggerire / raccomandare qualcos'altro sull'argomento.

  • Quali sono le guide consigliate sulla creazione di un file make, come faccio a compilare da questo makefile (chiamo g ++ da solo, uso 'make'?)
  • Guardando altri software linux, sembrano quasi sempre avere un file 'configure'. Che cosa fa esattamente? Controlla solo se sono installate le librerie richieste o fa molto di più che controllare i requisiti?
  • Come collego le librerie e come si collega ai miei parametri makefile o g ++? In Windows vorrei compilare la libreria, includere alcuni file di intestazione, dire al mio linker quale file lib aggiuntivo collegare e copiare un file dll. Come funziona esattamente questo processo in Linux?
  • Consigli per gli editor di codice? Attualmente sto usando nano e ho sentito parlare di Vim ed Emacs, ma non so quali sono i vantaggi di ciascuno di essi. Ce ne sono altri e perché dovrei considerarli su uno dei tre precedenti? Nota: non sto cercando un IDE.

Qualsiasi aiuto, collegamenti a guide e amp; la documentazione (preferibilmente quella rivolta ai principianti) è molto apprezzata!

È stato utile?

Soluzione

  

Quali sono le guide consigliate per la creazione di un file make, come posso compilare da questo makefile (chiamo g ++ da solo, uso 'make'?)

Compili dal makefile invocando " make " ;. E all'interno del tuo makefile, compili e collega usando g ++ e ld.

  

Guardando altri software linux, sembrano quasi sempre avere un file 'configure'. Che cosa fa esattamente? Controlla solo se sono installate le librerie richieste o fa molto di più che controllare i requisiti?

È uno script solitamente utilizzato per impostare varie cose in base all'ambiente utilizzato per la costruzione. A volte è solo uno script di shell di base, altre volte invoca strumenti come Autoconf per scoprire cosa è disponibile durante la creazione. L'opzione " configura " lo script di solito è anche un posto dove l'utente può specificare varie cose opzionali da costruire o escludere, come il supporto per funzionalità sperimentali.

  

Come collego le librerie e come si collega ai miei parametri makefile o g ++? In Windows vorrei compilare la libreria, includere alcuni file di intestazione, dire al mio linker quale file lib aggiuntivo collegare e copiare un file dll. Come funziona esattamente questo processo in Linux?

ld è il linker GNU. Puoi invocarlo separatamente (che è quello che farà la maggior parte dei makefile), oppure puoi avere delegato g ++ ad esso. Le opzioni che passi a g ++ e ld determinano dove cercare le intestazioni incluse, le librerie da collegare e come produrre il risultato.

  

Consigli per gli editor di codice? Attualmente sto usando nano e ho sentito parlare di Vim ed Emacs, ma non so quali sono i vantaggi di ciascuno di essi. Ce ne sono altri e perché dovrei considerarli su uno dei tre precedenti? Nota: non sto cercando un IDE.

Vim ed Emacs sono editor molto flessibili che supportano un sacco di usi diversi. Usa tutto ciò che ti sembra meglio, anche se suggerirei che potresti desiderare alcune cose minime come l'evidenziazione della sintassi.

Altri suggerimenti

Solo una nota per andare con le risposte di MandyK.

La creazione manuale di file make è di solito un modo molto insostituibile di costruire tra le varianti / unix di Linux Distro. Esistono molti sistemi di generazione per la generazione automatica di file di creazione, creazione senza creazione di file. GNU Autotools , Cmake , Scons , jam , ecc.

Anche per approfondire la configurazione.

  • Controlla i compilatori, le librerie, l'architettura di sistema disponibili.
  • Si assicura che il proprio sistema corrisponda all'elenco di pacchetti compatibile appropriato.
  • Consente di specificare gli argomenti della riga di comando per specializzare la build, il percorso di installazione, i pacchetti di opzioni ecc.
  • Configura quindi genera un Makefile appropriato specifico per il tuo sistema.
  

Cosa sono le guide consigliate   creando un file make, come faccio a compilare   da questo makefile (chiamo g ++   io stesso, uso "make"?)

Ho imparato a scrivere i makefile leggendo il GNU Make manual .

  

Guardando altri software linux, loro   sembra quasi sempre di averlo   file 'configura'. Cosa fa esattamente   fare? Controlla solo se necessario   le librerie sono installate o lo fanno   più che controllare i requisiti?

Il file di configurazione è generalmente associato a autotools . Come suggerisce il nome dello script, consente di configurare il software. Dal punto di vista dello sviluppatore ciò significa principalmente impostare macro, che determinano le variabili, quali librerie sono disponibili e così via. Verifica inoltre la disponibilità di librerie. Alla fine lo script genera un Makefile GNU, che puoi quindi utilizzare per compilare e installare effettivamente il software.

Il sistema di generazione GNU è solo uno dei tanti. Non mi piace particolarmente il sistema di generazione GNU in quanto tende ad essere più lento di altri e genera un brutto Makefile. Alcuni dei più popolari sono CMake , Jam ( Boost Jam potrebbe essere interessante per C ++) e waf . Alcuni sistemi di compilazione generano semplicemente Makefile, mentre altri forniscono un sistema di compilazione completamente nuovo. Per progetti semplici scrivere un Makefile a mano sarebbe facile, ma "controllare le dipendenze" (per le biblioteche, ecc.) dovrebbe essere fatto anche manualmente.

Modifica: Brian Gianforcaro anche sottolineato questo.

La tua domanda è un po 'troppo generica, ma ecco cosa consiglierei:

  • Editor: vim ed emacs sono popolari. Ciò che conta di più, come con la maggior parte degli strumenti, è padroneggiarne uno. Mi piace usare vim perché vi (il suo discendente) è disponibile ovunque, ma potrebbe non essere molto rilevante, specialmente se rimani su Linux. Qualsiasi editor di programmazione va bene.

  • configura: a meno che tu non faccia grandi progetti, non preoccuparti. È un incubo da usare ed eseguire il debug. Ha senso solo se intendi distribuire il tuo progetto - in tal caso, leggi l'autobook: http: // sources .redhat.com / autobook / . Come altri hanno detto, ci sono alternative (cmake, scons, ecc ...). Conosco sia scons che autotools, ma uso ancora make per piccoli progetti (un paio di file).

Per quanto riguarda la libreria condivisa: è quasi come windows, tranne che si collega direttamente alla libreria condivisa - non c'è distinzione .lib vs .dll in Linux. Per esempio. per un foo di libreria con una funzione foo:

int foo(void)
{
     return 1;
}

Lo costruiresti come segue:

gcc -fPIC -c foo.c -o foo.o
gcc -shared foo.o -o libfoo.so

Un principale (ovviamente nella vita reale hai messo l'API in un file di intestazione):

int foo(void);

int main(void)
{
    foo();
    return 0;
}

E poi, lo colleghi come:

gcc -c main.c -o main.o
gcc main.o -o main -L. -lfoo 

Il -L. è qui per dire che vuoi che il linker guardi nella directory corrente (contrariamente a Windows, questo non è mai fatto di default in Linux), il -lfoo dice di collegarsi con la libreria foo.

Quindi, per iniziare, ti indicherò prima questo guida per i makefile, copre anche alcune cose di collegamento.
È solo qualcosa che il mio professore universitario di informatica ci ha dato, l'ho trovato molto chiaro e conciso, molto utile.

E per quanto riguarda un IDE, utilizzo eclipse di solito perché gestisce anche il makefile. Per non parlare della compilazione e dell'output standard sono a portata di mano nel programma.
Era principalmente destinato allo sviluppo di Java, ma esiste anche un plug-in C / C ++!

Consiglio il libro The Art of Unix Programming di ESR. Copre la scelta dell'editor, il linguaggio di programmazione, ecc. Dà anche un buon senso alla mentalità dietro la programmazione su Unix o Linux.

Per gli editor, probabilmente vuoi Vim o Emacs. Sono entrambi diversi e quale è meglio è più sul gusto personale che su qualsiasi altra cosa. Io uso Vim. È ottimo per spostarsi rapidamente nel codice e apportare modifiche. Emacs non mi è piaciuto tanto, ma molte persone lo fanno. Emacs è estremamente estensibile e può essere utilizzato per qualsiasi cosa, da un lettore di notizie a un ide. Prova entrambi e vedi cosa ti piace.

  
      
  • Consigli per gli editor di codice? Attualmente sto usando nano e ho sentito parlare di Vim ed Emacs, ma non so quali sono i vantaggi di ciascuno di essi. Ce ne sono altri e perché dovrei considerarli su uno dei tre precedenti? Nota: non sto cercando un IDE.
  •   

Se stai usando Linux con un gestore di finestre (KDE, Gnome, ecc.) potresti anche considerare di utilizzare l'editor di testo standard per il tuo gestore di finestre. Il vantaggio principale che avrebbe su vim / emacs / nano è che sembrerebbe più familiare a chi proviene da un ambiente Windows - un editor scritto per essere eseguito sul gestore finestre ha una barra dei menu, file apri / salva dialoghi, annulla / ripristina e molte altre funzioni interessanti che probabilmente gli editor della console non possono eguagliare. (Sebbene emacs e vim siano piuttosto sofisticati in questi giorni, quindi chissà ;-P)

Su KDE (che è quello che uso) posso consigliare KWrite, che è un editor di testo ben funzionante ma abbastanza semplice con l'evidenziazione della sintassi; o Kate, che è un editor di testo più elaborato con alcune funzionalità extra: gestione della sessione, un pannello terminale integrato, invocazione automatica di make e diversi plugin tra cui un visualizzatore di simboli C / C ++. Di solito uso Kate per il mio lavoro in C ++ quando non voglio preoccuparmi di impostare un progetto IDE completo. (Cordiali saluti, l'IDE per KDE è KDevelop)

  

Consigli per gli editor di codice? sono   attualmente sto usando nano e ne ho sentito parlare   vim ed emacs, ma non so quale sia il   i benefici di questi sono l'uno sull'altro.   Ce ne sono altri e perché dovrei   considerali su uno dei precedenti   tre? Nota: non sto cercando un   IDE.

Vi ed Emacs sono i due editor Unix per antonomasia; se si utilizza un editor di testo anziché un IDE, uno di questi o i loro derivati ??(vim, xemacs, ecc.) è la strada da percorrere. Entrambi supportano l'evidenziazione della sintassi e tutti i tipi di funzionalità, per impostazione predefinita o tramite estensioni. La parte migliore di questi editor è l'estensibilità che offrono; emacs tramite una varietà di lisp e vim tramite il suo linguaggio di scripting.

Uso personalmente Emacs, quindi non posso dire molto su Vim, ma dovresti essere in grado di trovare molte informazioni su entrambi online. Emacs ha molti buoni tutorial e riferimenti, tra cui questo .

EDIT [dic 2014]: Di recente sembra esserci una tendenza di editor multipiattaforma e altamente estensibili. Questa potrebbe essere una buona scelta se desideri qualcosa di meno di un IDE, ma più grafico di vi / emacs e sensazione nativa su più piattaforme. Consiglio di guardare Sublime o Atom ; entrambi funzionano su Windows / Linux / Mac e hanno grandi comunità di plugin e temi.

lo spazio tra l'invocazione diretta di g ++ e l'uso di una catena di build di autotools è piuttosto limitato. Diventa bravo con gli autotools, che è davvero la cosa più vicina a un "progetto" disponibile nel mondo Linux / Open Source.

Per qualcuno che proviene da Visual Studio, tutta questa roba da riga di comando potrebbe sembrare arcana e disordinata. Prima di trasformarti in un drogato bash shell / vim / emacs, prova prima alcuni strumenti basati sulla GUI in modo da avere un po 'di tempo di transizione ...

  • QT 4.5 con il suo mini-IDE QT Creator. Questo è il miglior quadro, anni luce prima della concorrenza.
  • Eclipse (C ++) - Dalla mia esperienza con questo su Windows, trovo che sia sorprendente (questa è probabilmente la migliore applicazione Java mai scritta)
  • KDevelop
  • Anjuta
  • Se usi Delphi, Lazarus / FreePascal è una buona alternativa.

Sono sicuro che i peli lunghi derideranno e affermeranno che vim o emacs danno loro l'ambiente di sviluppo migliore e più veloce, ma colpi diversi per persone diverse. Qualcuno abituato a un IDE impiegherà del tempo per passare o potrebbe non voler cambiare affatto. Per tutte le loro abilità di modifica, la creazione di app GUI non è certamente un lavoro per strumenti 80x25. Ci vogliono anni per diventare un esperto della linea di comando delle cose, è più una trasformazione della visione del mondo che altro.

Come nota a margine tra le risposte corrette qui .. Nel caso in cui tu voglia toccare il terreno correndo come un ragazzo di Windows, suggerirei il nuovo < Qt SDK . Sarà come a casa :-)

Consiglio di usare SCons al posto di Make, fa lo stesso lavoro ma è più facile da usare e gestire immediatamente come creare librerie dinamiche, dipendenze, ecc. Ecco un esempio di vita reale per un semplice prog

env = Environment()
env.Append(CCFLAGS='-Wall')
env.Append(CPPPATH = ['./include/'])

env.MergeFlags('-ljpeg')
env.ParseConfig("sdl-config --cflags --libs")
env.ParseConfig("curl-config --cflags --libs")
env.ParseConfig("pkg-config cairo --cflags --libs")

env.Program('rovio-pilot', Glob('./src/*.cpp'))

Come editor di testo, sono contento di JEdit per la codifica, ma è una questione di gusti.

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