LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> SCONS - Nástroj pro sestavování software - 9

Zakončení seriálu aneb co se do minulých dílů nevešlo a mělo by

6.9.2010 00:00 | Radim Kolář | Články autora | přečteno 3593×

Knihovny testů

Pokud máme několik vlastních testů tak brzy zjistíme že ukládat je do souboru SConstruct je dost nepraktické. Zabírají tam místo, při editaci souboru je musíte scrollováním přeskakovat a zbytečně znepřehledňují situaci. Mnohem lepší je ukládat všechny testy do samostatných souborů a pak je importovat. Toho můžeme v SCons dosáhnout několika způsoby protože v SCons můžeme použít pro tento účel nástroje Pythonu.

První možností je použití příkazu exec. Je to sice takové sparťanské vyžadující více lidské práce, ale zase si můžeme import mechanizmus ručně doupravit a kupříkladu si automaticky stahovat nejnovější verze testů z VCS. Test taky můžeme přidat do hlavní knihovny Pythonu podadresář site-packages jako každý jiný Python kód který chceme sdílet v rámci naší instalace Pythonu. Je to vhodné pokud chceme sdílet testy napříč projekty. Poslední a nejpoužívanější variantou je umístit adresář site_scons do hlavního adresáře projektu. Tento adresář je automaticky přidán do Python import path a tak můžeme scripty a testy z tohoto adresáře importovat standardní Python directivou import. Pro zjednodušení nepoužívám namespace ale syntax from soubor import funkce. Doporučuji používat jeden soubor na jeden test a do souboru dovnitř si poznačit verzi testu nebo datum jeho poslední změny aby byla možná ruční synchronizace těchto testů napříč projekty.

Použití pkg-config

Některé složitější knihovny používají pro snažší integraci do build systému balík pkg-config. Tento program předá systému pro sestavování přepínače C preprocesoru a seznam knihoven které je potřeba nalinkovat pro správnou funkci programů používajících danou knihovnu. Podpora v SCons je velmi luxusní a snadno použitelná. Pro načtení přepínačů do prostředí projektu stačí jen zavolat:

env.ParseConfig("pkg-config x11 --cflags --libs")

Ukládání proměnných

SCons umí ukládat a načítat proměnné ze souboru. Je to alternativa k argumentům na příkazové řádce. V praxi se to moc nepoužívá, protože se to nedá automatizovat a ruční editace souboru se seznamem proměnných zbytečně zdržuje. Tato funkcionalita by se neměla nikdy používat jako náhrada cache testů - to jest načíst konfiguraci a uložit hodnoty proměnných do souboru. Pokud totiž dojde je změně prostředí tak ztrácíte možnost tuto změnu automaticky zaregistrovat a přenastavit build prostředí, což vede ke zbytečných chybám. Příklad na použití této funkcionality najdete zde.

Argumenty příkazového řádku

Argumenty příkazového řádku jsou nejpoužívanějším prostředkem předávání nastavení. Jedná se o páry klíč=hodnota, které uvedeme na příkazové řádce. V SCons scriptu se k nim dostaneme v pomocí ARGUMENTS.get(jméno argumentu, default hodnota). Na příklad se podívejte zde.

Cache

Další předností SCons je vestavěný systém pro cachování přeložených objektů. Pracuje podobně jako CCache ale opadá problém s integrací. Použití této funkcionality je velmi snadné. Stačí jen zavolat CacheDir(adresář do kterého můžeme zapisovat) a SCons se o zbytek postará sám. Soubory jsou ověřovány na aktuálnost pomocí MD5 signatur. Pokud máme otisk zdrojového souboru v cache společně s výstupem tak není třeba kompilovat, objekt se nahraje z cache. Použití této funkcionality velmi zrychlí překompilování velkých C++ projektů. Pokud sdílíme cache napříč projekty tak se doporučuje sestavovat objekty v náhodném pořadí scons --random aby procesy CC nepřekládaly jeden program vícekrát současně.

Souběžná kompilace

Protože SCons pracuje s projektem jako s celkem a nikoliv po adresářích jako make tak je velmi jednoduché správně seřadit práci kompilátoru tak aby bylo možné překládat více objektů současně. Je to výhodné jednak na vícejádrových procesorech kde nastává velmi výrazné zvýšení výkonu, ale také se to hodí na vykrytí míst kde kompilátor čeká na načítání souborů z disku, protože zatímco jeden proces čeká, druhý může překládat. Používá se to stejně jako u utility make scons -j 10 kde argument udává maximální povolený počet souběžných kompilací. Velikost argumentu stanovíme experimentálně. Pokud použijeme příliš velkou hodnotu a dojde nám operační paměť tak se dojde k výraznému prodloužení doby kompilace. Pro usnadnění použití abychom ho nemuseli při každém vyvolání SCons uvádět na příkazové řádce uložíme tento argument do proměnné environmentu SCONSFLAGS.

Překlad do zvoleného adresáře

U větších projektů nechceme aby se nám míchaly zdrojové a cílové soubory. Dosáhneme toho pomocí funkce VariantDir které předáme dva parametry - kam soubory ukládat a z jakého podstromu projektu.

VariantDir('build', 'src')

Závěr

Toto je konec seriálu o nástroji pro sestavování software SCons. Některé jeho vlastnosti jsme neprobírali a proto v případě zájmu čtenářů v komentářích pod článkem mohu ještě tak 2 dily dopsat. Pokud se jedná o kompilování C či C++ kódu tak by jste měli být tímto seriálem vybaveni velmi dobře pro většinu běžných problémů na které při použití SCons narazíte.

Projděte si celý seriál a použijte SCons ve svých projektech jako náhradu Gnu make, Autoconf, Automake nebo i novějších systémů jako je třeba Jam od Perforce. Taky je dobré si projít porovnání SCons s ostatními systémy, protože v současné době narůstá jednak počet projektů co se od GNU Autotools odklání a jednak počet projektů co se snaží GNU Autotools nahradit. Pro nový projekt bych dnes již Autotools nepoužil, po mnohaleté zkušenosti s nimi si nejsem jist zda náhodou nezpůsobují více problémů než řeší.

Asi nejznámější jejich náhrada je CMake, který ale závisí na gnu make a proto nemůže nabízet takovou integraci a funkcionalitu jako má SCons. SCons je velmi elegantní a snadno použitelný systém, který se dá velmi dobře přizpůsobit na míru, což oceníte hlavně u větších projektů. Často se také o SCons říká, že to není program ale framework. To je z části pravda a je to dobře, protože každý větší projekt má svůj poměrně specifický build systém a v SCons nejste vázáni konvencemi jako třeba v případě Automake a můžete si proto ničím nerušeni build naprogramovat tak jak je potřeba namísto ohýbání hotového uzavřenějšího systému.

Nejčastější věc co se SCons vytýká je jeho rychlost. SCons používá MD5 signatury a proto test který program se změnil a který ne nějakou dobu potrvá. Musím říci že mne většina komentářů ohledně rychlosti SCons kterou lidé považují za nepoužitelnou překvapuje. V tomto blogu v komentáři si můžete přečíst komentář člověka kterému se nelíbí že u SCons trvá u jeho velkého C++ projektu asi 10 sekund než začne kompilovat. Když si vezmete počet kompilací za hodinu, kterých moc není, a vynásobíte je dobou o kterou je SCons pomalejší než make tak musíte tuto dobu porovnat s dobou strávenou nad tím, že make vyrobil nekorektní build nebo že bylo potřeba udělat clean all a kompletní rekompilaci aby to make zvládnul správně sestavit.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

1.12.2016 22:13 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.
Komentářů: 1

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

27.8.2016 8:55 /Delujek
Dnes po 4 letech komunitního vývoje vyšla diaspora 0.6.0.0
diaspora* je open-source, distribuovaná sociální síť s důrazem na soukromý
Více v oficiálním blog-postu
Přidat komentář

24.8.2016 6:44 /Ondřej Čečák
Poslední týden CFP LinuxDays 2016; pokud byste rádi přednášeli na LinuxDays 2016 8. a 9. října v Praze, můžete svůj příspěvek přihlásit, následovat bude veřejné hlasování.
Přidat komentář

9.8.2016 22:56 /Petr Ježek
Zařazení souborového systému reiser4 do jádra 4.7 znamená konečně konec patchování jádra jen kvůli možnosti použít reiser4.
Přidat komentář

12.7.2016 13:14 /František Kučera
Spolek OpenAlt zve na 130. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 21. července od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

11.7.2016 16:53 /Redakce Linuxsoft.cz
Konference LinuxDays hledá přednášející. Přihlášky poběží do konce prázdnin, v září bude hlasování a program. Více na https://www.linuxdays.cz/2016/cfp/.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

4.12.2016 22:54 / František Kučera
Dárek

9.11.2016 7:42 / Mane
hardwood floor waxing

8.11.2016 13:38 / Mira
Konfigurace maldet na Centos serveru

2.11.2016 11:06 / Warlock
Odkaz v PHP

20.10.2016 0:13 / Jan Kuba
Re: Basic

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze