Kurs FORTRANU | ||
---|---|---|
Předcházející | Další |
Na udržování rozsáhlých projektů byla vyvynuta řada nástrojů. V podstatě se dělí do několika kategorií. Jednak jsou to nástroje na udržování konzistentního projektu při spolupráci řady lidí (CVS, RCS). Dále pak nástroje na kompilaci (udržování informací o tom co je preložene zmeněné a pod). Tyto naástroje mohou být například aplikovány na vývoj nějaké knihovny.
Na internetu existuje rozsáhlá literatura k tomu to tématu. Nejdůležitejší asi jsou: Správa projektů pomoci CVS [ http://www.linux.cz/noviny/2001-04/clanek08.html], Program-Library-HOWTO [ http://www.linux.cz/linuxdoc/HOWTO/Program-Library-HOWTO/index.html].
Dále se budeme věnovat vývoji nějaké programové knihovny. Pod tímto názvem se myslí několik procedur a funkcí řešící problém s určité oblasti. Knihovny které se používají na počítači se tradičně dělí na několik skupin podle způsobu, jakým interagují s programem, který používá jejich funkce. Základní dělení je na statické, které se staticky pridají (přilinkují) k programu, takže ten se může odnést na disketě jinam, spustit a tam pojede (tj program i knihovna jsou v jednom souboru na disku). Dále pak na sdílené, které se k programu nijak nepřičelnují a ten pouze ví kde je hledat a pokud potřebuje nějakou funkci z knihovny, tak si ji najde a vyvola z jiného souboru na disku. Extrémním případem techto shared knihoven jsou tzv. dynamické knihovny (pluginy) které si program sám vyhledáva na disku při běhu, takže uživatel může například měnit knihovnu a tím i metody výpočtu apod.
Bylo by velmi težkopádné dokola překládat všechny funkce knihovny při malé změně jedné funkce a proto je třeba mít nástroj, který bude schpoen rozpoznat co se změnilo a co nikoli a podle toho daný soubor přeložit nebo jej nechat. Tím je program
make. Je řízen pomocí
Makefilesouboru který obsahuje pravidla a akce které mají udělatr to či ono.
Použití všemožných nástrojů si ukážeme na fiktivním případě tvorby programové knihovny.
Naším úkolem bude vytvořit statickou knihovnu pod Unixovým systémem se dvěma funkcema na jednoduché statistické funkce průměr a jeho chybu.
Nejprve napíšeme do souboru tyto dvě funkce. V souboru prumer.f90 bude:
function prumer(n,x) integer :: n real :: prumer, x(n) prumer = sum(x(1:n))/n end function
Soubor chyba.f90 pak bude obsahovat:
function chyba(n,x,prumer) integer :: n real :: chyba, x(n), prumer chyba = sum((x(1:n)-prumer)**2)/(n - 1) end function
Sestavení Makefile je jednoduché:
# Makefile pro std libstd.a: chyba.o prumer.o ar rv libstd.a prumer.o chyba.o; \ ranlib libstd.a prumer.o: prumer.f90 f90 -c prumer.f90 chyba.o: chyba.f90 f90 -c chyba.f90
Poznámky. Nejdůležitější je pamatovat si, že mezery před odsazenými příkazu jsou dělané tabelátorem TAB. Příkaz ar vytváří archiv z několika souboru a ranlib pak jeho index. Parametr -c říká překladači, aby se soubor pouze přeložil a nevyvářel se program.
Takto vytvořenou knihovnu pak můžeme v nějakém našem programu použít zcela přirozeně:
program zk real :: x(3) = (/ 1.0, 2.0, 3.0 /) write(*,*) prumer(3,x) end program
Který přeložíme pomocí příkazu:
f90 zk.f90 -L. -lstd
Parametr -L označuje adresář ve kterém se má hledat knihovna libstd.a která je specifikována jako druhý parametr -l bez předpony lib.
Předcházející | Domů | Další |
Datové typy | Grafika |