Gå til innhold

Programmering på linux! (spørsmål)


Anbefalte innlegg

Jeg har installert Fedora 12 og er veldig fornøyd sålangt (bortsett fra et par småting :p) men jeg er intressert i å komme i gang med c++ utvikling.

 

Jeg har tidligere programmert c++ i windows og har da brukt Visual Studio. Men har nå kommet meg over til linux og prøver å ta tak i det. Nytt for meg er "makefiler", "gcc", "g++" og lignende.

 

Jeg har fått til å opprette et tomt dokument, renamet det til test.cpp og inni den kodet int main, cout hello world. Ikke så spennende altså.

 

Måten jeg kompilerte dette var at etter at jeg savet test.cpp kjørte terminal og "g++ test.cpp". Dette resulterte i at en ny fil kom til verden i samme mappe som test.cpp, nemlig "a.out". Jeg slang den rett inn i terminalen slik at jeg fikk '/home/USERNAME/a.out' (jada jeg brukte hjemmeområdet mitt :p)... dette resulterte i at på nesten linje i terminalen så fikk jeg "Hello World!"... altså så har jeg vel klart å kode og kompilere 7 linjer med c++ kode.

 

Men er dette måten det gjøres på? På større prosjekter bruker man makefiler som jeg forstår men hva er greia med outputten av c++ filer... i windows er jo dette ".exe" filer, hva er det i linux og hvordan kjører jeg dem(i windows dobbelklikker man jo bare på exefila)? (jeg har jo fått en ".out" fil)

 

og "makefiler"... jeg har lest noen tutorials og skjønner litt hvordan jeg skal lage innholdet iht prosjektet mitt men hva med filnavnet... er det "makefile" som er standard? er dette en kjørbar fil? Eller slenger jeg (drag and drop) denne inn i terminalen jeg har oppe?

 

Jeg har prøvd meg med "gcc test.cpp" da gcc er liksom den de fleste bruker(fleste tutorials på nette bruker gcc) men fikk opp en del errors som ikke resulterte i en ny fil som da jeg kjørte g++

 

flere spørsmål på en gang her men håper jeg får svar på alle sammen :D

Lenke til kommentar
Videoannonse
Annonse

Nå slipper du vel ikke helt unna makefiler, siden det er standarden, ihvertfall når kildekoden skal distribueres og kompileres av andre, slik som man tradisjonelt har gjort i unix siden tidenes morgen og så videre ...

 

Men, du har noen alternativer, og siden jeg stort sett utvikler i Java har jeg notert meg at både Netbeans og Eclipse - som er blant de mest utbredte Java-IDE'ene - også fins i versjoner for C/C++. I tillegg har du KDevelop ihvertfall, og sikkert mange andre også.

 

For å svare på a.out-spørsmålet så prøv

 

gcc mytest.c -o mytest

så får du en eksekverbar som ikke heter a.out. Mrk. at det ikke er tradisjon for ekstensjon i filnavnet på eksekverbare i unix-aktige omgivelser som linux.

 

Og et annet tradisjonelt svar på alle andre spørsmål du sikkert har om gcc:

man gcc

 

Og så må du google "gcc tutorial howto", men det sier seg jo selv :-)

 

PS: For å eksekvere fila må exe-bit'et settes, f.eks. slik

 

chmod o+x a.out

 

I utgangspunktet er det veldig dumt å ha "." med i path-variablen, tenk deg at en eller annen kuk klarer å snike følgende script inn i hjemmekatalogen din, og kaller det for "ls":

 

rm -rf $HOME

 

Derfor må du starte programmet ditt slik:

./a.out

 

Unix/Linux har også et standardprogram innebygget som heter "test". Den første blemma folk går på er følgelig

 

gcc test.c -o test
test

 

... og så skjer ikke det de forventer, fordi de faktisk kjører et helt annet program ...

 

Når du har satt exe-bit'et på - noe du også kan gjøre i filbehandleren til Gnome og Kde - kan du også kjøre programmet ved å dobbeltklikke (eller er det enkeltklikke i kde ... husker ikke ...)

Endret av quantum
Lenke til kommentar

Make er etter min mening en råtten faenskap som har sett sine beste dager. Jeg anbefaler deg å ta en titt på SCons. Veldig kjekt og greit. Når det gjelder utviklingsmiljø, så anbefaler jeg vim. Den kan du konfigurere så langt til helvete som du bare vil, at det (etter min mening) overgår ethvert IDE lett.

 

Nedenfor er forøvrig en veldig nyttig introduksjon til GCC. Den gjør at du får et overblikk av hvordan det henger sammen med kompilering, linking, etc.

 

http://www.network-theory.co.uk/docs/gccintro/

 

Off topic: Bruker forøvrig Fedora selv. Hater den handicappa jævla dritten av en distro, og skal bytte tilbake til Arch eller hva som faen helst så fort jeg får tid. Dog skal det sies at det er likevel 100 ganger bedre å kode på crappy jævla Fedora enn på Windows. :-)

Lenke til kommentar

Har gått tre år på informatikk på blindern nå og der programmerer vi C/C++ med Red Hat Linux og GCC.

 

- Editor

Gedit for det meste. Codeblocks for store prosjekter.

 

- Makefiles

Har alltid hatt en Makefile som jeg i starten skrev slik av den bygde et dependency-tre og kompilerte derfra--mindre hassle enn å skrive en ny for hvert nye prosjekt. Etterhvert vil du selvfølgelig skrive egne Makefiles for de store prosjektene dine med build targets, libs, etc.

 

- Utskrift

Angående hvordan du får opp utskrift i Linux, se på stdin og stdout. I windows når du dobbelklikker på en kjørbar fil så oppretter windows et kommandovindu/terminal for deg og så oppretter stdin- og stdout-filer til prosessen din. I Linux når du starter programmet ditt, opprettes det stdin- og stdout-filer for prosessen din, men disse filene blir echo-d ut til den samme terminalen du startet programmet ditt i. Det samme skjer faktisk i windows om du prøver å starte programmet ditt fra en kommandolinje/terminal. ;) I Linux kan du faktisk si ifra hvilke filer som skal brukes for stdin og stdout ved bruk av < og > når du starter programmet ditt. Eksempel:

main.c:

#include <stdio.h>
int main()
{
 printf("This is written to stdout...\n");
}

$ gcc -o main main.c

$ ./main

This is written to stdout...

$ ./main >fil.txt

fil.txt:

This is written to stdout...

Tilsvarende har du < for å spesifisere at stdin skal være en strøm fra en fil (og ikke ta input fra det du skrivet i terminalen):

main.c:

#include <stdio.h>
int main()
{
 char buf[1024];
 printf("Getting input from stdin...\n");
 gets(buf);
 printf("This was in stdin:\n%s\n", buf);
}

$ gcc -o main main.c

$ ./main

Getting input from stdin...

foo bar

This was in stdin:

foo bar

$ ./main <fil.txt

Getting input from stdin...

This was in stdin:

This is written to stdout...

 

- Filnavn

I windows heter kjørbare filer .exe-filer, i Linux spiller ikke filendinga noen rolle. Prøv: (cat er et praktisk lite Linux-program ;))

$ cat >main.c

#include <stdio.h>

int main() { printf("Hello, World!\n"); }

<Ctrl+C>

$ gcc -o main.minprogramfilendelse main.c

$ ./main.minprogramfilendelse

Hello, World!

Lykke til med Linux! :) Hærlig å programmere i!

Endret av LostOblivion
Lenke til kommentar

Selv bruker jeg Code::Blocks på Linux, fordi jeg hater vim og emacs ^^ men det er vel en smakssak og flame-topic.

Men code::blocks fungerer glimrende, det har code::completion og syntax::highlighting som er veldig kjekt. det har lånt mye fra Visual Studio også, som er et pluss. På ubuntu(som jeg bruker) er det litt vanskelig å installere, men helt overkommelig. Sikkert enklere på Fedora dog, siden Ubuntu har konsekvent gamle biblioteker.

Endret av GeirGrusom
Lenke til kommentar

Makefiles er uansett nyttig å forstå hvordan fungerer, siden det er defacto standarden for unix-systemer, og har ingen andre dependencier enn make-programmet. Samtidig nyttig å forstå forskjellen på kompilering og linking. Dette abstrakterer IDE-er veldig, slik at man gjerne ikke forstår hvordan build-prosessen faktisk foregår.

 

Det finnes flere verktøy som lar deg generere Makefiles, er sjeldent man skriver disse for hånd, hvis ikke prosjektet er av en veldig liten skala. Standarden er GNU sine "autotools", da autoconf og automake. Disse er ganske gammeldagse, tunge og "arcane", men ganske kraftig.

 

CMake er et alternativ. SCons er et annet, men det krever at python er installert. Hvis man bruker IDE-er til å kompilere med blir saken veldig mye enklere for utvikleren, men samtidig slitsomt for en annen å kompilere det samme programmet, siden man må bruke den samme IDE-en til å kompilere.

Endret av TheMaister
Lenke til kommentar
  • 4 uker senere...
På ubuntu(som jeg bruker) er det litt vanskelig å installere, men helt overkommelig. Sikkert enklere på Fedora dog, siden Ubuntu har konsekvent gamle biblioteker.

Da må du ha en eldre versjon eller noe. Etter å ha lest detteb estemtej eg meg for å prøve code::blocks på laptopen min, som kjører ubuntu. "sudo apt-get install codeblock" var alt som skulle til og fungerer helt outof the box for min del :)

Lenke til kommentar
På ubuntu(som jeg bruker) er det litt vanskelig å installere, men helt overkommelig. Sikkert enklere på Fedora dog, siden Ubuntu har konsekvent gamle biblioteker.

Da må du ha en eldre versjon eller noe. Etter å ha lest detteb estemtej eg meg for å prøve code::blocks på laptopen min, som kjører ubuntu. "sudo apt-get install codeblock" var alt som skulle til og fungerer helt outof the box for min del :)

Akkurat som alt annet i Ubuntu, er denne versjonen temmelig gammel.

Lenke til kommentar

8.02 er fra Februar 2008, altså 2 år gammel. Nyeste versjon er fra Januar 2010. Den må lastes ned fra SVN, da de ikke legger ut nye utgivelser på nettsiden av en eller annen grunn.

Versjoner som kun lastes ned fra SVN anser jeg som utviklingsversjoner og ikke som "stable". Uansett om de er mer stabile enn Dovre. Og det er nok grunnen til at de ikke legger ut en nyere versjon.

 

Og et utviklingsverktøy som er kun 2 år gammelt anser jeg ikke som et problem.

Lenke til kommentar

Vel, nå er akkurat code::blocks en viss avsporing, for poenget var ikke at code::blocks var gammelt. Jeg forstår at ubutnu ikke vil legge inn fra SVN, men nyere versjoner er tungvint å installere fordi Ubuntu opererer med blant annet gamle versjoner av wxWidgets.

Det er mulig at Ubuntu ikke er det rette operativsystemet hvis du ønsker å prøve det nyeste av det nye. Men er det noe særlig bedre på andre linux varianter da? Nå er det vel stort sett kun Fedora, og da særlig Rawhide, som koser seg på "the bleeding edge" ?

 

Tilbake til tema - jeg har sett litt på C/C++ modulene i Eclipse og NetBeans. Og konklusjonen er vel at det er bedre å velge dedikerte C/C++ verktøy som Code::Blocks. Brukbare alternativer er Anjuta og KDevelop. Litt enklere editor som også kan være greie (med syntax highlighting) er geany og gedit.

 

Holder du også på med scripting, så er Komodo Edit verdt å titte på.

Endret av tomsi42
Lenke til kommentar

Make er etter min mening en råtten faenskap som har sett sine beste dager. Jeg anbefaler deg å ta en titt på SCons. Veldig kjekt og greit. Når det gjelder utviklingsmiljø, så anbefaler jeg vim. Den kan du konfigurere så langt til helvete som du bare vil, at det (etter min mening) overgår ethvert IDE lett.

 

Selv vil jeg foreslå Emacs, :evil:, men om du velger vim eller emacs er egentlig likegyldig. Begge er utrolig kraftige editorer du kan sette opp til slik du vil, og som vil overgå andre IDEer når du først lærer deg dem ordentlig. Læringskurven kan være ganske bratt, der synes jeg emacs er litt bedre siden den gir deg menyer til å begynne med, men skaffer du deg en god tutorial for editoren er det ikke noe problem.

 

 

Visual Studio har en hyggelig instilling som gjør at du bruker samme tastatursnarveier som standard emacs, og som er lett å endre med hva du har blitt vant til. Har hørt at du kan få noe som heter viemu til VS også som gjør det mer vim aktig...

Emacs gir deg også tilgang til en meget god gui til gdb, som er linux' debugger of choice, i tillegg til en egen debugger.

 

Vel, nå er akkurat code::blocks en viss avsporing, for poenget var ikke at code::blocks var gammelt. Jeg forstår at ubutnu ikke vil legge inn fra SVN, men nyere versjoner er tungvint å installere fordi Ubuntu opererer med blant annet gamle versjoner av wxWidgets.

Det er mulig at Ubuntu ikke er det rette operativsystemet hvis du ønsker å prøve det nyeste av det nye. Men er det noe særlig bedre på andre linux varianter da? Nå er det vel stort sett kun Fedora, og da særlig Rawhide, som koser seg på "the bleeding edge" ?

 

Sitter selv på Ubuntu, og opplever at omtrent alle bibliotekene jeg bruker for grafikkprogrammering må lastes ned selv, siden Ubuntu ligger flere versjoner etter. Og her snakker vi om pakker som ligger ute med ny versjon klar til nedlasting fra hjemmeside! Planlegger å bytte til Gentoo når jeg får tid, dvs. aldri men kan jo håpe, siden har et mye bedre gradert "pakke"system (du må kompilere ting selv, men pytt sann).

Ubuntu har GLEW 1.5.1 sluppet 2008, mens GLEW 1.5.2 med støtte for OpenGL 3.x sluppet 2009. Har Freeglut 2.4.0, som kom i 2005, mens siste versjon er 2.6.0 som kom i november 2009 og trengs for å bruke OpenGL 3.x.. Shall I go on?

 

Tilbake til tema - jeg har sett litt på C/C++ modulene i Eclipse og NetBeans. Og konklusjonen er vel at det er bedre å velge dedikerte C/C++ verktøy som Code::Blocks. Brukbare alternativer er Anjuta og KDevelop. Litt enklere editor som også kan være greie (med syntax highlighting) er geany og gedit.

 

Holder du også på med scripting, så er Komodo Edit verdt å titte på.

Av venner og bekjente som ikke sverger til enten vim eller emacs så er QtCreator ganske populær selv om du ikke skal lage Qt applikasjoner. Veldig mye av det samme som Visual Studio har, dog noe mer knotete prosjektstyring imo. Ellers er som du nevner Gedit og KDevelop ganske populære.

Endret av Mr.Garibaldi
Lenke til kommentar

Selv vil jeg foreslå Emacs, :evil:, men om du velger vim eller emacs er egentlig likegyldig. Begge er utrolig kraftige editorer du kan sette opp til slik du vil, og som vil overgå andre IDEer når du først lærer deg dem ordentlig. Læringskurven kan være ganske bratt, der synes jeg emacs er litt bedre siden den gir deg menyer til å begynne med, men skaffer du deg en god tutorial for editoren er det ikke noe problem.

 

Det falt på XEmacs (pga jobb) og jeg kan bekrefte at læringskurven er bratt... jeg kommer fra Visual Studios luksus og savner en del ting. De finnes kanskje der men alt er jo faen meg gjemt bak allslags fanteri av CTRL+? eller ALT+?. Heldigvis har jeg lært meg å binde shit til Fn taster.. jaisis!

 

Visual Studio har en hyggelig instilling som gjør at du bruker samme tastatursnarveier som standard emacs, og som er lett å endre med hva du har blitt vant til. Har hørt at du kan få noe som heter viemu til VS også som gjør det mer vim aktig...

Emacs gir deg også tilgang til en meget god gui til gdb, som er linux' debugger of choice, i tillegg til en egen debugger.

 

Hvem i alle verden vil få Visual Studio til å ligne de editorene. Jeg sitter på jobb og prøve å få emacs til å ligne VS :D :D

Lenke til kommentar

Første gang jeg møtte emacs var en gang på 80 tallet når jeg jobbet for Prime Computer. Da var det en fremgang i forhold til sammenlignbare editorer. På slutten av 80 tallet, så ble jeg kjent med unix, og dermed vi. vi er også en krafitg editor med et særdeles egenartet brukergrensesnitt. Allikevel foretrekker jeg vi fremfor emacs. Emacs er bare "strange". Emacs fansene mener det samme om vi :D Og det helt OK for meg.

 

Men jeg har siden den gang blitt kjent med mer moderne editorer og IDE'er (Turbo Pascal, Delphi, Visual Studio, Eclipse, NetBeans, Notepad++ for å nevne noen). Og det er ikke i tvil - i mine øyne - om at de er mye mer effektive å jobbe med. Men det kan ha noe med at jeg mer opptatt av å kverne ut kode, ikke å sitte kose meg med å fintune editoren min. (ja, den er en flamebait - men dere må ikke bite på ;) ).

Lenke til kommentar
  • 2 uker senere...

Av alle mulige avsporinger i denne tråden var ingen som vurderte å kommentere bruken av gets(*char) i LostOblivions post... også av en ifi student da :tease:

 

Anyways (Vim 4 life)

 

Brukte mye Kate en gang i tiden, det er ikke direkte et IDE, men en avansert teksteditor for programmering

Endret av aC
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...