Previous: GPC Command Line Options, Up: Invoking GPC



5.2 Najčešće korištene opcije GPC-a

Kao najjednostavniji primjer, pozivanje

     gpc foo.pas

kaže GPC-u da prevede izvorni kod u datoteci foo.pas i da proizvede izvršnu (engl. executable) datoteku sa podrazumijevanim (engl. default) imenom, koje je foo.exe na EMX platformi, a.exe na CygWin, ujedno a.out i a.exe na DJGPP, te a.out na većini ostalih platformi.

Korisnik blizak s BP-om (Borland Pascalom) može uočiti da je neophodno dati datoteci ekstenziju (sufiks) .pas: GPC je zajedničko sučelje (engl. interface) za Pascal prevodilac, ali i za C, ObjC, i C++ prevodilac, asembler, linker; a možda i za Adu i Fortran prevodilac. Prema ekstenziji vaše izvorne datoteke GPC određuje koji prevodilac treba pokrenuti. GPC prepoznaje Pascal programe prema ekstenziji .pas, .p, .pp ili .dpr. GPC također prihvaća izvorne kodove u drugim jezicima (npr. .c for C) i poziva odgovarajuće prevoditelje za njih. Datoteke s ekstenzijom .o ili bez ijedne poznate se smatraju objektnim datotekama ili bibliotekama funkcija (engl. library) koje treba povezati (engl. link).

Još jedan primjer:

     gpc -O2 -Wall --executable-file-name --automake --unit-path=units foo.pas

Ovo će prevesti izvornu datoteku foo.pas u u izvršnu datoteku imena foo (--executable-file-name) sa relativno dobrom optimizacijom (-O2), uz upozorenja o potencijalnim problemima -Wall. Ako program koristi jedinice (UNIT) ili importira module, njih će prevodilac potražiti u direktoriju imena units (--unit-path) i automatski prevesti i povezati (--automake).

Slijedeća tablica navodi najčešće korištene opcije GPC-a.

--automake
Provjerava da li korišteni moduli/jedinice moraju biti ponovno prevedeni i vrši ponovno prevođenje ako je to neophodno.
--unit-path=dir[:dir...]
Traži jedinice (engl. i Pascal UNIT) i objektne datoteke u danim direktorijima.
--object-path=dir[:dir...]
Traži objektne datoteke u navedenim direktorijima.
--unit-destination-path=dir
Smješta prevedene jedinice (GPI i objektne datoteke) u direktorij dir. Podrazumna (engl. default) vrijednost u slučaju izostavljanja opcije je trenutni direktorij.
--object-destination-path=dir
Smješta prevedene objektne datoteke (npr. od C datoteka, ali ne od Pascal jedinica) u direktorij dir. Podrazumijevana (default) vrijednost je direktorij dan sa --unit-destination-path.
--executable-path=dir
Smješta proizvedenu izvršnu datoteku u direktorij dir. Podrazumna vrijednost je direktorij u kojem se nalazi glavna izvorna datoteka.
-o file
Smjesti izlaz u datoteku file. Ovo vrijedi bez obzira na tip izlaza koji je proizveden, bio on izvršna datoteka, objektna datoteka, asemblerski listing itd.

Kako samo jedna izlazna datoteka može biti navedena, nema smisla koristiti -o opciju kad se prevodi više od jedne ulazne datoteke, osim ako se proizvodi izvršna datoteka kao izlaz.

--executable-file-name[=name]
Proizvodi ime izvršne datoteke iz imena izvorne datoteke, ili koristi name kao ime izvršne datoteke. Razlika u odnosu na -o opciju je da --executable-file-name uzima u obzir --executable-path, dok -o to ne čini i prihvaća ime datoteke koje uključuje direktorij. Dalje, --executable-file-name se odnosi samo na izvršne datoteke, ne na ostale izabrane oblike izlaznih datoteka.
-Ldir
Traži biblioteke funkcija (eng. libraries) u direktoriju dir. Može se navesti više puta.
-Idir
Traži include (uključne) datoteke u direktoriju dir. Može se navesti više puta.
-llibrary
Potraži biblioteku funkcija library kod povezivanja. Ova se opcija mora nalaziti u komandnoj liniji iza svih izvornih ili objektnih datoteka te drugih biblioteka koje referenciraju library.
-O[n]
Izaberi nivo optimizacije. Bez optimizacije (ili -O0 što je podrazumna -default- vrijednost), cilj prevoditelja je da smanji vrijeme prevođenja i da proces otkrivanja pogrešaka (engl. debugging) da očekivane rezultate. Naredbe su neovisne: ako zaustavite program prekidnom točkom (engl. breakpoint) između naredbi, možete dodijeliti novu vrijednost nekoj varijabli ili promijeniti programski brojač na bilo koju drugu naredbu u istoj rutini i dobiti točno rezultate koje očekujete od izvornog koda.

S optimizacijom, prevodilac nastoji reducirati veličinu izvršnog koda i trajanje izvršavanja. Što veća vrijednost n, više će se optimizacija izvesti, ali će prevođenje trajati dulje.

Ako koristite više -O opcija, sa ili bez n, zadnja opcija je ona koja je važeća.

-g
Proizvedi informacije za debugging (ispravljanje progrešaka) prikladne za gdb. Za razliku od nekih drugih prevoditelja, GNU Pascal dozvoljava da koristite -g sa -O. Prečice poduzete od strane optimiziranog koda mogu povremeno proizvesti iznenađujuće rezultate: neke varijable koje ste deklarirali mogu uopće ne postojati; tijek programa može se skokovito premjestiti gdje ga niste očekivali; neke naredbe se mogu ne izvršiti jer izračunavaju konstantnu vrijednost ili su njihove vrijednosti već bile pri ruci; neke se naredbe mogu izvršiti na drugim mjestima jer su pomaknute izvan petlji. Međutim, pokazuje se mogućim debuggirati optimizirani izlaz. Ovo čini razumnim koristiti optimizer za programe još i u testnoj fazi.
-s
Ukloni sve simbol tablice i relokacijske informacije iz izvršne datoteke. Primjedba: ovo nema utjecaja na performanse prevedene izvršne datoteke.
-Wall
Daj upozorenja za izvjestan broj konstrukata koji nisu po sebi pogrešni ali su rizični ili sugeriraj da je možda učinjena pogreška u kodiranju. Postoje dodatne opcije upozorenja koje nisu uključene sa -Wall, vidi GCC opcije upozorenja (engl. warnings) (see Options to Request or Suppress Warnings (the GCC manual)), dok -Wall samo upozorava na takve konstrukte koje je lako izbjeći u programima. Dakle, savjetujemo koristiti -Wall na većini programa.

Primijetimo da neka upozorenja (npr. ona o neinicijaliziranim varijablama) nisu nikad dana ako se ne prevodi s optimizacijom (vidi gore), jer prevodilac inače ne analizira uzorke korištenja varijabli.

-Werror
Pretvara sva upozorenja u pogreške.
-S
Zaustavi se nakon prevođenja; ne asembliraj. Izlaz je u obliku asemblerskog koda za svaku izvornu datoteku. Podrazumno (default), ime asemblerske datoteke za datu izvornu datoteku nastaje zamjenom ekstenzije sa .s.
-c
Prevedi i asembliraj izvornu datoteku, ali ne povezuj. Izlaz je u obliku objektne datoteke za svaku izvornu datoteku. Podrazumno, ukoliko se drugačije ne navede, ime objektne datoteke za izvornu datoteku nastaje zamjenom ekstenzije izvorne datoteke sa .o.
-static
Na sistemima koji podržavaju dinamičko povezivanje, ovo zabranjuje povezivanje sa dijeljenim bibliotekama (engl. shared libraries), tj. traži statičko povezivanje. Na ostalim sistemima ova opcija nema efekta.
-Dmacro[=def]
Definiraj makro i uvjetni simbol macro kao def (ili kao 1 ako je def izostavljen).
-b machine
Parametar machine specificira ciljni stroj za prevođenje. Ovo je korisno ako je GNU Pascal instaliran kao prevodilac za drugu platformu (engl. cross- compiler).
-v
Ispiši (na tok pogreški) naredbe izvršavane da se pokrenu pojedini stupnjevi prevođenja. Također ispiši broj verzije pogonskog programa prevoditelja, preprocesora i samog prevoditelja.
--classic-pascal-level-0
--classic-pascal
--extended-pascal
--object-pascal
--ucsd-pascal
--borland-pascal
--pascal-sc
GNU Pascal podržava svojstva nekoliko različitih Pascal standarda i dijalekata. Inicijalno, oni su svi omogućeni. Ovi prekidači upućuju GPC da ograniči sebe na svojstva specificiranog standarda; ne omogućuju bilo kakva dodatna svojstva. Upozorenja o nekim opasnim konstruktima koji bi bili legalni za specificirani dijalekt (npr. operacija dodjele vrijednosti tipiziranoj konstanti uz --borland-pascal) se potiskuju.

Inicijalno, GNU Pascal dozvoljava redefiniciju inekih ključnih riječi jezika. Svaki od ovih prekidača prouzročuje da GNU Pascal zabrani redefiniciju ključnih riječi specificiranog standarda.

Ispravni ISO 7185 Pascal programi bi se trebali prevesti ispravno sa ili bez --classic-pascal. Međutim, bez ove opcije neka GNU proširenja i značajke drugih dijalekata Pascala su također podržane. Sa ovom opcijom, ta proširenja su odbijena.

Ove opcije nisu tu s namjerom da budu korisne, one postoje samo da zadovolje pedantne koji bi inače tvrdili da GNU Pascal ne ispunjava ISO standard ili nije zaista kompatibilan sa Borland Pascalom, ili što već. Mi preporučujemo, radije, da korisnici iskoriste prednosti ekstenzija GNU Pascala i zanemare ograničenja drugih prevodilaca.

-pedantic-errors
Proizvedi greške radije nego upozorenja za kršenja prenosivosti koda (engl. portability). Za razliku od C-a, ovo ne implicira -pedantic opciju, pa možete, na primjer, koristiti -pedantic-errors bez -pedantic, ali sa --extended-pascal.
--gpc-main=name
Imenuj ulaznu točku glavnog programa name umjesto main na nivou povezivača. Ovo je korisno npr. kad se radi s nekim C bibliotekama funkcija koje definiraju svoju vlastitu main funkciju i traže da se programska ulazna točka (engl. entry point) nazove drugačije.

(Preferira se korištenje ove direktive prevodiocu u jedinici ili modulu koji se povezuje s tom čudnom C bibliotekom, radije nego da se direktiva daje u naredbenoj (komandnoj) liniji.)