Linux terminal - Compiler flere c++ filer

Tags:    c++ linux terminal kompiler

Jeg prøverat lave små programmer i linux, skrevet i c++, hvor at jeg nu vil prøve at separerer mine klasser og funktioner. Jeg bruger Ubuntu 12.04.

Nu har jeg min main i én fil, main.cpp, en header i en anden, minfunktion.h, og deres kode i en tredje, minfunktion.cpp.

Hvordan kompilerer jeg dette til ét program ved én linje af kode?
Og hvordan kompilerer jeg det således at jeg kompilerer hvert objekt for sig først. dvs. først main.cpp og derefter minfunktion.cpp?



6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 11 karma
Sorter efter stemmer Sorter efter dato
Du kan compile dine c++ filer til hver deres objektfil. Derefter lænker du dine objektfiler sammen til et program.

Brug evt. følgende Makefile:
Fold kodeboks ind/udKode 


Så har du dine c++ filer og header filer i 'src' biblioteket:
Fold kodeboks ind/udKode 




Den vil jeg prøve, tak :) Men jeg så til min time at man kunne kompilere hvert objekt for sig først i terminalen, hvorefter man linker dem sammen, også i terminalen.


Det er dét makefilen gør. Hvis du ser i det output jeg postede, så starter makefilen med følgende:
Fold kodeboks ind/udKode 


Der compiler jeg fire cpp filer til objektfiler af samme navn.

Derefter lænker makefilen de fire objekt filer sammen:
Fold kodeboks ind/udKode 


src biblioteket bliver oprettet takket være makefilen eller er det et standard bibliotek?

Nej, det er noget jeg har fundet på :-)
Det er en håndskrevet Makefil, så opret bare et 'src' bibliotek i dit projekt.

Når i siger linke sammen, mener i så er symbolic link. Eller hvad mener i med link?

Nej, det er noget andet.

Compileren oversætter din C++ kode én fil ad gangen til maskinkode, men udelader adresser på funktioner, som ikke ligger i den pågældende fil.

Lænkeren tager resultatet fra compileren (objektfilerne) og "lænker" dem sammen til én eksekverbar fil eller et library. Her findes alle de tidligere undladte referencer, som indsættes de rigtige steder.

Så resultatet af compileringen er objektfiler, og resultatet af lænkningen er et program...sådan ca. :-)



Du kompilerer ikke objekter hver for sig, du kompilerer hele dit program, så det er velsagtens main.cpp (hvor din main-metode er) du skal bygge vha. make. Følger du en form for tutorial eller prøver du dig bare frem?

Edit: Hmm hurtig google viser at det ikke er make, men g++ du skal bruge for at kompilere, se evt http://www.linuxquestions.org/linux/answers/Programming/Building_C_programs_on_Linux_0 hvor du selv kan læse mere om det.



Indlæg senest redigeret d. 28.04.2012 23:31 af Bruger #16797
Følger du en form for tutorial eller prøver du dig bare frem?

Edit: Hmm hurtig google viser at det ikke er make, men g++ du skal bruge for at kompilere, se evt http://www.linuxquestions.org/linux/answers/Programming/Building_C_programs_on_Linux_0 hvor du selv kan læse mere om det.


Jeg ved skam godt det er g++ jeg skal bruge, har jeg gjort i lang tid. Problemet er at når jeg skriver "man g++" og prøver at læse mere om det, så kan jeg ikke se mig ud af hvilke ekstra tegn og syntakts at jeg skal bruge.

Og prøver mig til dels frem, men går til et programmeringskursus. Det er dog på spansk, så til tider er det svært at få det hele med.

---

Brug evt. følgende Makefile:


Den vil jeg prøve, tak :) Men jeg så til min time at man kunne kompilere hvert objekt for sig først i terminalen, hvorefter man linker dem sammen, også i terminalen.
(har prøvet at spørge dem, men mit spanske er ikke ligefrem det bedste endnu)

Så har du dine c++ filer og header filer i 'src' biblioteket:


src biblioteket bliver oprettet takket være makefilen eller er det et standard bibliotek?



Når i siger linke sammen, mener i så er symbolic link. Eller hvad mener i med link?

Om sådanne spørglsmål her er http://ubuntuforums.org/forumdisplay.php?f=310 sektionen
Stedet at kende. Der sidder nogle rygtig dygtige linux udviklere til hjælp.




Indlæg senest redigeret d. 30.04.2012 07:32 af Bruger #16700
Jeg fandt også enlig løsningen gennem mit spansk talende kursus. Det krævede lidt gebrokkent spansk, men har fået det til at virke.

Fold kodeboks ind/udKode 


Kan ikke helt forstå hvor at header filen og prototyperne kommer ind i billedet, men hvad så, det fungerer. Tusind tak for hjælpen. Vil også prøve at sætte mig mere ind i makefilen (selvom det nu virker mere simpelt at gøre det uden makefilen).



t