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 3869×

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ů

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

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

> Poslední diskuze

1.8.2017 7:32 / Cassidy
structural consultants

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

26.7.2017 21:12 / Jaromir Obr
Podminka

15.6.2017 9:34 / Ondřej Havlas
php,

Více ...

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