02 - 4 - GNU GCC

Introduktion

I den här guiden tänkte jag förklara hur man kommer igång med att kompilera C++ program i Linux med hjälp av GNU GCC.
Jag kommer att visa vad man ska skriva för att få GCC att kompilera koden manuellt via en terminal och hur man automatiserar processen med en sk makefile. Har du inte GCC kan du hämta det på den här adressen: http://gcc.gnu.org/.

GCC står för för GNU Compiler Collection och är alltså en samling kompilatorer, man kan bland annat kompilera C och C++ och det är det vi ska göra i den här guiden. Den kan också kompilera Java, Ada, Fortran mm.


Skriv ett testprogram

Vi måste ju ha någonting att kompilera och därför skapar vi ett litet testprogram som vi ska använda oss av senare. Börja med att starta en texteditor som du gillar, t.ex. Vim eller Emacs. Skapa en ny fil som heter "main.cpp" och skriv förljande i den:

  1. #include <iostream>
  2. int main()
  3. {
  4. std::cout << "Kompileringstest.\n" << std::endl;
  5. return 0;
  6. }


Vad texten gör överlåter jag till de andra delarna i guiden att förklara.


Kompilera från terminalen

Om man bara ska testa att kompilera en enda fil kan det kanske kännas onödigt att göra en hel extrafil bara för att kunna kompilera programmet. Alltså väljer man att kompilera direkt från terminalen. Detta gör man genom att skriva följande:

g++ main.cpp


Vi använder oss av kompilatorn g++ som är en del av GCC, den kompilerar som du kanske förstår C++. Inga konstigheter här, skriv bara g++ och namnet på filen du vill kompilera. Vill du specificera namnet på det kompilerade programmet lägger du till flaggan "-o" som står för outfile och skriver därefter namnet på filen som du vill skapa, såhär alltså:

g++ main.cpp -o KompileringsTest


För att köra ditt nykompilerade program (förutsatt att det inte vart några fel) skriver du sedan "./KompileringsTest" i consolen, då borde du få ut texten som du skrev i programmet förut. Går inte det behöver du köra "chmod u+x KompileringsTest". Om du inte specificerat med -o-flaggan kommer filen som standard döpas till "a.out".


Makefile

Makefile är en fil som säger till kompilatorn vilka källkodsfiler som ska kompileras och med vilka flaggor, detta är extremt användbart vid projekt med flera källkodsfiler. Detta anväds ofta i lite större projekt, och det kan vara bra att veta hur man gör redan nu, alltså så ska jag visa hur man gör här Smiley
Börja med att skapa en fil som heter "Makefile" (OBS stort 'M' i början, det roll i UNIX) och spara den i samma katalog som "main.cpp" som du skapade förut. Skriv sedan följande i filen:


MyProgram: main.cpp
g++ main.cpp -o KompileringsTest


Om du sedan skriver "make" i konsolen i rätt katalog så ska programmet kompileras med de flaggor som du skrev i makefilen. Använder du flera filer för att kompilera så lägger du bara till dem på raden "MyProgram: ..." efter "main.cpp" och efter "main.cpp" på g++ raden. Såhär skulle det se ut:


MyProgram: main.cpp fil2.cpp
g++ main.cpp fil2.cpp -o KompileringsTest


Inget svårt alls, headerfiler behöver du inte ens inkludera i makefilen, det räcker med att du skriver '#include "header.h"' i .cpp filerna.

Nu tänkte jag visa hur man gör för att skapa variabler i sin makefile. Jag kan visa min källkodsfil som jag använder till mitt konsoleprogram:


AppName = MyApp
AppVersion = 0.1

MyProgram: main.cpp engine.cpp

############################################
### Console Appplication
###
### Application Name: $(AppName)
### Application Version: $(AppVersion)
############################################
### Compiling...

g++ main.cpp engine.cpp -o $(AppName)-$(AppVersion)

### Done!
############################################


Raderna som börjar med '#' är kommentarer och de ignoreras av make.
För att skapa en variabel skriver man alltså "AppVersion = 0.1" t ex. Då skapar man en variabel som heter AppVersion och innehåller värdet "0.1". Inga problem där va? För att skriva ut värdet av variabeln så skriver man sedan "$(AppVersion), då ersätts den texten med värdet av variabeln när man kompilerar sedan. Kan vara bra om man t.ex. vill ge flera filer samma kompileringsflaggor.


Nu ska du kunna kompilera program i Linux och fortsätta med C++ guiden här på Blinkenlights.
När du blir ombedd att skriva in kod är det filen "main.cpp" du skall redigera. För att kompilera programmet skriver du "make" i katalogen där du har sparat "main.cpp" och "Makefile". Du kan sedan köra programmet genom att skriva "./programnamn" där programnamn är namnet och versionsnumret du angett i filen "Makefile". Du kan behöva ändra rättigheter på filen så att du kan köra den ("chmod u+x programnamn").

Källa: http://blinkenlights.se/