Fordítás Ubuntu Linux-on (Cmake, Travis .. )

Fórumok

Sziasztok!

Tudnátok kérlek segíteni, hogy miképp tudnék C++ projekteket Ubuntu Linux-on könnyen fordítani?
Hallottam már a CMake-ről, illetve a TravisCI-ról is, de az én tudatomban még a './configure && make && make install' van .

Milyen fordítók vannak Linuxra? GCC, clang++? Mind ugyanazt tudja?
CMake mire való? Könnyű használni? C++ projektet lehet debug-ban soronként is futtatni?
IDE kell a fordításhoz, hogy terminálban a legkönnyebb?
Makefile és EMakefile között mik a különbségek?
Cpp, hpp fájlok micsodák? Melyik a 'main' . cpp ahonnan indul a program?
Függőségeket hogyan tudom feltérképezni, és telepíteni?

Példaképpen ilyen C++ programot szeretnék fordítani :
https://github.com/OpenFodder/openfodder/tree/master/Source

Előre is köszönöm!

Hozzászólások

Talán egy kicsit sok kérdést tettél fel, és nekem az a tippem, hogy először el kéne olvasnod egy C++ könyvet, és csak aztán kérdezni. Amire röviden lehet válaszolni:
Ha csak lefordítani akarod, akkor nem kell IDE. Az IDE akkor jó, ha fejlesztesz, de akkor nagyon.
A make, cmake arra való, amit a neve sugall. Egy program, ami a függőségek alapján lefordítja a programodat. Kell neki egy szöveges fájl, pl. a meke-nak a Makefile ami leírja a függőségeket, ez alapján a make hívja a leíró fájl szerinti fordítót, linkert, vagy bármit, ami a fordításkor kell. A cmake egy kicsit bonyibb, de a lényeg ugyan ez.
A projekt, amit linkeltél, első ránézésre nem sok segítséget ad a fordításhoz. Ezt vagy megtalálod, vagy kitalálod, itt nem hiszem, hogy bárki segítene ebben.

Pontosan mit szeretnél? Miért?

Ha csak a linkelt programot szeretnéd használni, akkor ezt a repot (https://github.com/OpenFodder/openfodder) letöltöd, majd (ha telepítve van a make csomag) a make parancs segít lefordítani.
A Makefile úgy látom, Linux alatt használandó, az EMakefile pedig Windows-on.

A make parancs várhatólag hibákat fog adni, amelyek valószínűleg csomagok hiánya miatt lesz - ezeket telepíteni kell. Ha abban akadsz el, ide beírod a pontos hibaüzenetet, és valaki biztos segít majd.

Egy foldert fellépve ott van a Makefile: https://github.com/OpenFodder/openfodder/blob/master/Makefile

A tipikus Makefile-okhoz képest mérten elég rövid és egyszerű. Cserébe nem kezeli a függőségeket, hanem mindent újrafordít mindig. Kisebb projektekhez én is ilyet szoktam csinálni.

Ebben látható, hogy clang++-szal fordít, ami gondolom van Ubuntun csomagban (nem használtam eddig).

A legelején a változók környékén kell még kurkászni, hogy az sdl2-config programnak fenn kell lennie, illetve az include libek fenn legyenek. Ezeket én úgy szoktam kikeresgélni, hogy a packages.ubuntu.com-on fájlnév szerint lehet keresni, hogy mi melyik csomagban van meg. Ritkán fordul elő, hogy valami nincs csomagban, ezek szerintem lesznek.

Tehát az algoritmus:

* A függőségeket telepíted (ezek tipikusan *-dev csomagok, amikben nem csak a bináris, de a headerek is benne vannak, hogy lehessen az adott libre fordítani)
* clang++-t telepíted
* make-t telepíted
* Belépsz a folderbe, ahol a Makefile van, és "make all"-t futtatsz.
* Ha valahol elakadsz, akkor kétségbeesetten guglizol és fórumozol :-)

IDE-be betölteni a programot és debuggolni is természetesen lehet, de most azt nem írom le.

> Milyen fordítók vannak Linuxra? GCC, clang++? Mind ugyanazt tudja?
Nem pont ugyan azt tudják, de a sima C/C++ projektek 95%-át mindkettővel le tudod fordítani

> CMake mire való? Könnyű használni? C++ projektet lehet debug-ban soronként is futtatni?
CMake forráskód buildeléshez használható, nem könnyű használni, de sima make-nél szerintem könnyebb. C++ projekteket debug módban soronként futtatni valamilyen IDE való (vagy VS Code editor akár, ezt javaslom ha kezdő vagy) egyes IDE-k felismerik a CMake projektleíró fájlokat és az alapján jól lehet menedzselni a kódot, fordítani, léptetni debug módban soronként

> IDE kell a fordításhoz, hogy terminálban a legkönnyebb?
Projekttől függ: kis részénél mindegy, kis részénél könnyebb IDE-ből (nagyobb androidos projektek, stb.) legtöbbnél könnyebb terminálból fordítani

> Makefile és EMakefile között mik a különbségek?
Passzolom

> Cpp, hpp fájlok micsodák? Melyik a 'main' . cpp ahonnan indul a program?
.cpp - általában sima forrás, függvények leírásai
.hpp - általában függvények definíciói (fejlécei) és egyben definíciói. Kezdőként mindegy, nagy pojekteknél ez lassabban fordul, mert akkor is objectté fordítják ha nem módosul
A main függvény bárhol lehet, keress rá a projekt könyvtárában pl. ezzel a paranccsal: "grep -r "main("

> Függőségeket hogyan tudom feltérképezni, és telepíteni?
* github readme-ben leírják és szerencsés esetben "sudo apt install libakármi-dev"
* fordítási hibánál kiírja, hogy mi kell vagy a build system (make, Cmake, stb.) kiíjra configure fázisnál hogy milyen library hiányzik
* végső esetben google a header fájlokra, amiket nem talál