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.
-L
dir- Traži biblioteke funkcija (eng. libraries) u direktoriju dir. Može se
navesti više puta.
-I
dir- Traži include (uključne) datoteke u direktoriju dir. Može se navesti
više puta.
-l
library- 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.
-D
macro[=
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.)