Hogyan készítsünk C++ programokat Linuxon?

1. Készítsük el a forráskódot C++ nyelven valamilyen szövegszerkesztő segítségével pl.: vi, pico, joe, mcedit.
2. fordítsuk le a forráskódot g++ fordítóval.
3. Futtassuk a programot.

A forráskód elkészítése

A forráskódot szövegszerkesztő segítségével készíthetjük el és szövegfájlokba tárolhatjuk. A forráskodokat .cpp, a fejlécfájlokat .h kiterjesztéssel nevezzük el. Egyszerű, könnyen használható szövegszerkesztő az mcedit program.
Egy szövegfájl létrehozása vagy megnyitása:

$ mcedit proba.cpp

A programban funkcióbillentyűket (F1, F2, ...) és menüt is használhatunk. A funkcióbillentyűk működéséről a képernyő alján megjelenő feliratok is tájékoztatnak. A menüt az F9-es funkcióbillentyűvel lehet megjeleníteni.

Fordítás g++ fordítóval

A fordítás lépései:
1. Előfeldolgozás: az #include-ok beépítése, makródefiníciók kiértékelése, behelyettesítése
2. Fordítás: a forráskódból tárgykódot (object) kódot készít, ami már gépi kód.
3. Szerkesztés (link): a tárgykódokból végrehajtható állományt hoz létre.

A fordítót a parancssorba kiadott g++ paranccsal tudjuk elindítani. Ekkor paraméterként kell megadnunk a fordítani kívánt állományokat, továbbá kapcsolokkal tudjuk befolyásolni a fordító müködését. Egy egyszerű "Hello World" program fordítása:

$ g++ hello.cpp

Ekkor a fordító egy a.out nevű futtaható állományt készít a hello.cpp forráskódból, amellyet a következőképpen tudunk futtatni:

$ ./a.out

Ha szeretnénk a elkészülő programunknak más nevet adni, akkor a -o kapcsolóval ezt megtehetjük:

$ g++ -o hello hello.cpp

Ekkor egy hello nevű futtatható állományt hoz létre a fordító.

Ha a forráskódot több fájl tartalmazza, akkor azok mindegyikét soroljuk fel paraméterként a fordítonak. Pl. tegyük fel, hogy a következő fájlokat készítettük el: proba.cpp, verem.h, verem.cpp, datum.h, datum.cpp. Ekkor ezeket a következő képpen tudjuk lefordítani:

$ g++ -o proba proba.cpp verem.cpp datum.cpp

A header fájlokat nem kell megadni a fordítónak, mivel azt előfeldolgozás során beépíti azokba a .cpp fájlokba, ahová include-oltuk.
Lehet külön-külön lefordítani a forrásfájlokat, majd a végén összeszerkeszteni. A -c kapcsoló hatására a fordító csak a tárgykódot (object fájlt, default .o kiterjesztéssel) készíti el, majd ezeket lehet összeszerkeszteni:

$ g++ -c proba.cpp
$ g++ -c verem.cpp
$ g++ -c datum.cpp
$ g++ -o proba proba.o verem.o datum.o

A g++ néhány hasznos kapcsolója:
-o fáljnévkimeneti állomány nevének a megadása
-cFordítás szerkesztés nélkül, tárgykódot (object) fájlt készít
-SAssembly nyelvű kódot készít a forrás állományból
-WallFigyelmeztetéseket (warning) is megjeleníti a fordítás alatt.
-O, -OnOptimalizálás bekapcsolása, n-el optimalizálási szinteket is lehet megadni pl.: 1 vagy 2 vagy 3 stb.
-DPi=3.14Makró definíciót lehet adni
További információt a fordító működéséről a man oldalon találhat: man gcc.

Makefile használata

A make program segítségével automatizálni lehet a fordítás menetét. Egy Makefile-ba írhatjuk le a fordítás mikéntjét, amelyet a make program értelmez és végrehajt. A makefile-ba írhatunk:

A make program meghívása: $ make
Ekkor alapértelmezésként az akt. könyvtárban lévő Makefile nevű fájlt hajtja végre.
Másik makefile használata: $ make -f masik_makefile

Egy példa a makefile-ra:
# Makefile

# A proba nevű futtatható állomány és közbülső object fájlokra vonatkozó szabályok
proba:main.o mo.o seged.o;g++ -o proba main.o seged.o mo.o
main.o:seged.h seged.cpp mo.h mo.cpp;g++ -c -o main.o main.cpp
mo.o:mo.h mo.cpp seged.h seged.cpp;g++ -c -o mo.o mo.cpp
seged.o:seged.h seged.cpp;g++ -c -o seged.o seged.cpp

Egy másik példa a makefile-ra:
# Makefile

#Változó definíciók
CPPFLAGS=-Wall
OBJ=main.o mo.o seged.o
SEGED=seged.h seged.cpp
MO=mo.h mo.cpp


#Szabályok, változók használatával
proba:$(OBJ);g++ -o proba $(OBJ)
main.o:$(SEGED) $(MO);g++ -c -o main.o main.cpp
mo.o:$(SEGED) $(MO);g++ -c -o mo.o mo.cpp
seged.o:$(SEGED);g++ -c -o seged.o seged.cpp



Felhasznált irodalom: