Ero sivun ”Kääntäminen” versioiden välillä
| Rivi 53: | Rivi 53: | ||
Kaikki rakennusjärjestelmät tarvitsevat usein apua löytääkseen järjestelmästä puuttuvat kehityskirjastot (headerit). ''[[pkg-config]]'' on standardi työkalu, joka auttaa rakennusjärjestelmiä löytämään tarvittavat kirjastotiedostot ja niiden sijainnit. | Kaikki rakennusjärjestelmät tarvitsevat usein apua löytääkseen järjestelmästä puuttuvat kehityskirjastot (headerit). ''[[pkg-config]]'' on standardi työkalu, joka auttaa rakennusjärjestelmiä löytämään tarvittavat kirjastotiedostot ja niiden sijainnit. | ||
== Perinteinen GNU Autotools tapa == | == Perinteinen GNU Autotools -tapa == | ||
Vaikka tämä prosessi on edelleen validi ja käytössä monissa vanhemmissa tai yksinkertaisemmissa projekteissa | Vaikka nykyaikaiset järjestelmät ovat yleistyneet, tämä prosessi on edelleen validi ja käytössä monissa vanhemmissa tai yksinkertaisemmissa projekteissa. | ||
Ohjelmat kannattaa yleisesti ottaen asentaa jotenkin | Ohjelmat kannattaa yleisesti ottaen asentaa jotenkin muuten kuin muualta haettua koodia kääntämällä. Jos itse kääntäminen on välttämätöntä, käy se yleensä näin: | ||
# '''Valmistelut:''' Tarkista, että ainakin [[gcc]] ja [[make]] ovat asennettuina. | |||
# '''Lähdekoodin haku ja purku:''' | |||
[[tar]] xvzf hyvasofta.tar.[[gz]] | [[tar]] xvzf hyvasofta.tar.[[gz]] | ||
| Rivi 65: | Rivi 65: | ||
tar xvjf hyvasofta.tar.[[bz2]] | tar xvjf hyvasofta.tar.[[bz2]] | ||
tai käytä ohjelmistoprojektin [[versionhallintajärjestelmä]]ä. | tai käytä ohjelmistoprojektin [[versionhallintajärjestelmä]]ä (esim. [[Git]]). | ||
# '''Siirry hakemistoon komennolla:''' | |||
cd hyvasofta | cd hyvasofta | ||
Lue hakemistossa olevat ''README''- tai ''INSTALL''-tiedostot. | |||
# ''configure'' -tiedoston luonti (tarvittaessa): Mikäli configure-tiedostoa ei löydy, aja ''autoreconf''-[[Bash-skriptaus|skripti]] komennnolla: | |||
autoreconf -i | autoreconf -i | ||
autoreconf ajaa automaattisesti tarvittavat ohjelmat ja luo configure-skriptin. | |||
# '''Konfigurointi:''' Aja ''configure''-[[Bash-skriptaus|skripti]] komennolla: | |||
./configure | ./configure | ||
# tai määrittele asennuspolku käyttäjän kotihakemistoon: | |||
tai | |||
./configure --prefix=$HOME/ohjelmat/ | ./configure --prefix=$HOME/ohjelmat/ | ||
Jos | * Riippuvuudet: Jos ''configure'' epäonnistuu puuttuvien riippuvuuksien vuoksi (kehityskirjastot eli headerit), ne löytyvät paketinhallinnasta yleensä päätteellä ''-devel'' tai ''-dev''. [[Debian]]-pohjaisissa jakeluissa ne on usein helppo asentaa komennolla: | ||
sudo apt-get build-dep ohjelma | |||
# '''Kääntäminen:''' | |||
make | |||
# '''Asennus:''' Siirry [[pääkäyttäjä]]ksi ja asenna ohjelma (katso kuitenkin kohta [[Kääntäminen#Kääntäminen ja paketinhallinta|Kääntäminen ja paketinhallinta]]): | |||
sudo make install | |||
# '''Siivoaminen ja poisto:''' Voit poistaa luodut binäärit ja Makefilen lähdekoodihakemistosta komennolla ''make clean''. Joskus Makefilessa on myös poistotoiminto ''make uninstall''. | |||
make clean | |||
== Kääntäminen ja paketinhallinta == | |||
Kenties paras vaihtoehto on tehdä käännetystä ohjelmasta oman jakelun mukainen paketti ja asentaa se paketinhallinnan kautta. Tällöin komentoa ''make install'' ei anneta. | |||
Katso esimerkiksi [[CheckInstall]], sekä [[Deb-paketin tekeminen]]. | |||
Jos käännettävä ohjelmisto tarjoaa jotakin toiminnallisuutta, josta paketinhallinnan olisi hyvä olla tietoinen, voit luoda niin sanotun '''"dummy"'''-paketin. Dummy-paketti sisältää vain riippuvuudet ja muun metadatan. Debianissa tällaisen paketin tekoon on olemassa apupaketti ''equivs''. | |||
== Kääntäminen ja paketinhallinta == | == Kääntäminen ja paketinhallinta == | ||
Versio 13. marraskuuta 2025 kello 21.10
Tämä artikkeli käsittelee koodin kääntämistä konekieleksi. Ohjelmatekstin suomeksi kääntämisestä kerrotaan artikkelissa kotoistus.
Kääntämisellä tarkoitetaan toimenpidettä, jossa ohjelman lähdekoodin perusteella luodaan konekielinen ohjelma, joka on tietokoneen ymmärtämässä muodossa. Samasta lähdekoodista voidaan yleensä kääntää versiot monille eri alustoille. Lähdekoodia on myös mahdollista muokata itse, kun taas konekielisen ohjelman muokkaaminen on käytännössä erittäin rajoitettua.
Jos haluat muokata oman jakelusi pakettia, tämä kannattaa tehdä jakelun omilla työkaluilla ja mieluiten jakelun omasta lähdekoodista. Oman jakelun lähdekoodipaketit on yleensä mahdollista asentaa paketinhallinnan kautta erillisestä asennuslähteestä (source).
Jatkossa käsitellään muualta haetun lähdekoodin kääntämistä ja asentamista ilman jakelun omia työkaluja.
Nykyaikaiset rakennusjärjestelmät
CMake
CMake on yksi yleisimmistä ja de facto -standardeista rakennusjärjestelmistä monissa C/C++-projekteissa, erityisesti suurissa projekteissa kuten KDE-ympäristössä.
Tyypillinen prosessi
Modernit kääntämistavat suosivat ulkopuolista käännöstä (out-of-source build). Tämä tarkoittaa, että kääntämisen luomat tiedostot (Makefile, objektit yms.) sijoitetaan omaan erilliseen hakemistoon (esim. build), jolloin lähdekoodihakemisto pysyy puhtaana.
# 1. Luo erillinen käännöshakemisto ja siirry sinne
mkdir build
cd build
# 2. Luo käännöstiedostot (Makefiles) lähdekoodin perusteella (lähdekoodi on ".." eli yksi ylöspäin hakemistorakenteessa.)
cmake ..
# 3. Käännä ohjelma (voidaan käyttää make- tai cmake --build -komentoa)
make
# 4. Asenna ohjelma järjestelmään
sudo make install
on: ''cmake .'', ''make'' (tai ''cmake --build .''), ''sudo make install''.
Meson
Meson on uudempi, nopea ja suosittu rakennusjärjestelmä, joka on yleistynyt erityisesti GNOME-ympäristön ja monien muiden vapaan lähdekoodin projektien keskuudessa. Se käyttää tyypillisesti Ninja-työkalua käännösprosessin suorittamiseen.
Tyypillinen prosessi
# 1. Luo käännöshakemisto (Meson hoitaa tämän itse)
meson setup builddir
# 2. Käännä ohjelma Meson-hakemistossa
meson compile -C builddir
# 3. Asenna ohjelma järjestelmään
sudo meson install -C builddir
Ninja ja riippuvuuksien hallinta
Ninja on nopea, matalan tason rakennusjärjestelmä, jota Meson käyttää suoraan ja jonka CMake voi valita taustajärjestelmäksi perinteisen Makefilen sijaan käännösprosessin nopeuttamiseksi.
Kaikki rakennusjärjestelmät tarvitsevat usein apua löytääkseen järjestelmästä puuttuvat kehityskirjastot (headerit). pkg-config on standardi työkalu, joka auttaa rakennusjärjestelmiä löytämään tarvittavat kirjastotiedostot ja niiden sijainnit.
Perinteinen GNU Autotools -tapa
Vaikka nykyaikaiset järjestelmät ovat yleistyneet, tämä prosessi on edelleen validi ja käytössä monissa vanhemmissa tai yksinkertaisemmissa projekteissa.
Ohjelmat kannattaa yleisesti ottaen asentaa jotenkin muuten kuin muualta haettua koodia kääntämällä. Jos itse kääntäminen on välttämätöntä, käy se yleensä näin:
tar xvzf hyvasofta.tar.gz
tai
tar xvjf hyvasofta.tar.bz2
tai käytä ohjelmistoprojektin versionhallintajärjestelmää (esim. Git).
- Siirry hakemistoon komennolla:
cd hyvasofta
Lue hakemistossa olevat README- tai INSTALL-tiedostot.
- configure -tiedoston luonti (tarvittaessa): Mikäli configure-tiedostoa ei löydy, aja autoreconf-skripti komennnolla:
autoreconf -i
autoreconf ajaa automaattisesti tarvittavat ohjelmat ja luo configure-skriptin.
- Konfigurointi: Aja configure-skripti komennolla:
./configure # tai määrittele asennuspolku käyttäjän kotihakemistoon: ./configure --prefix=$HOME/ohjelmat/
- Riippuvuudet: Jos configure epäonnistuu puuttuvien riippuvuuksien vuoksi (kehityskirjastot eli headerit), ne löytyvät paketinhallinnasta yleensä päätteellä -devel tai -dev. Debian-pohjaisissa jakeluissa ne on usein helppo asentaa komennolla:
sudo apt-get build-dep ohjelma
- Kääntäminen:
make
- Asennus: Siirry pääkäyttäjäksi ja asenna ohjelma (katso kuitenkin kohta Kääntäminen ja paketinhallinta):
sudo make install
- Siivoaminen ja poisto: Voit poistaa luodut binäärit ja Makefilen lähdekoodihakemistosta komennolla make clean. Joskus Makefilessa on myös poistotoiminto make uninstall.
make clean
Kääntäminen ja paketinhallinta
Kenties paras vaihtoehto on tehdä käännetystä ohjelmasta oman jakelun mukainen paketti ja asentaa se paketinhallinnan kautta. Tällöin komentoa make install ei anneta.
Katso esimerkiksi CheckInstall, sekä Deb-paketin tekeminen.
Jos käännettävä ohjelmisto tarjoaa jotakin toiminnallisuutta, josta paketinhallinnan olisi hyvä olla tietoinen, voit luoda niin sanotun "dummy"-paketin. Dummy-paketti sisältää vain riippuvuudet ja muun metadatan. Debianissa tällaisen paketin tekoon on olemassa apupaketti equivs.
Kääntäminen ja paketinhallinta
Kenties paras vaihtoehto on tehdä käännetystä ohjelmasta oman jakelun mukainen paketti ja asentaa se paketinhallinnan kautta. Tällöin komentoa make install ei anneta, vaan tilalle tulee jakelun omat paketinluomis- ja asennuskomennot. Katso esimerkiksi CheckInstall sekä Deb-paketin tekeminen.
Jos käännettävä ohjelmisto tarjoaa jotakin toiminnallisuutta, josta paketinhallinnan olisi hyvä olla tietoinen, tämän voi kertoa paketinhallinnalle, vaikka itse ohjelmasta ei tekisikään oikeata ohjelmapakettia. Tähän käyttöön sopii "dummy"-paketti, joka sisältää vain riippuvuudet ja muun metadatan. Debianissa tällaisen paketin tekoon on olemassa apupaketti equivs.