% cc [ option ] ... file ...
Npr.
% cc -O3 -c a.c - prevodi "a.c" u "a.o" uz optimizaciju
trećeg nivoa
% cc -O3 -c b.c - prevodi "b.c" u "b.o"uz optimizaciju
trećeg nivoa
% cc -O3 -c main.c - prevodi "main.c" u "main.o" uz
optimizaciju trećeg nivoa
% cc -o prog a.o b.o main.o -lm
- linkuje "a.o", "b.o" i "main.o" u "prog"
uz linkovanje dodatne "math" bibilioteke
% prog - izvršava program "prog"
Olakšavanje gornjeg procesa moguće je korišćenjem "make" podsistema, u kom
slučaju se kreira "makefile" koji bi imao sledeći izgled:
% cat >makefile
CFLAGS = -O2
OBJECTS = a.o b.o main.o
all : prog
prog : $(OBJECTS)
cc -o prog $(OBJECTS) -lm
<Ctrl-D>
% _
Te se automatsko prevođenje vrši navođenjem naredbe "make":
% make
Češće korišćene opcije "c" prevodioca su:
-ansi - regulišu kompatibilnost sa standardom
-ansiposix (za detaljniji prikaz pogledadi "man cc")
-cckr
-xansi
-common
-signed - "char" tip podataka će se smatrati da je "signed"
-c - izvorni kod se samo prevodi (ne i linkuje)
-pca - pokreće "pca" preprocesor koji automatski otkriva
paralelizme u izvornom kodu. Ova opcija takođe
uključuje "-mp" (multiprocesing) opciju.
-64 - generišu se 64-bitni objekti. Ovo podrazumeva -mips4
-32 - generišu se 32-bitni objekti. Ovo podrazumeva -mips1.
-mips1 - objektni kod se generiše instrukcijskim setom
RISC R2000/R3000 arhitekture
Ovo podrazumeva -32.
-mips2 - objektni kod se generiše instrukcijskim setom
MIPS II arhitekture
(MIPS I + R4000 specifične ekstenzije)
Ovo podrazumeva -32.
-mips3 - objektni kod se generiše instrukcijskim setom
pune MIPS III arhitekture (npr. R4000).
Ovo podrazumeva -64.
-mips4 - objektni kod se generiše instrukcijskim setom
pune MIPS IV arhitekture (npr. R8000).
Ovo podrazumeva -64. Inače, ovo je default opcija.
-o output - imenuje izlazni izvršni program ("a.out" ako
se ne navede)
-O0 - isključivanje svih optimizacija. Ovo je
default opcija
-O1 - uključivanje lokalnih optimizacija koje mogu
biti urađene brzo
-O ili -O2 - uključivanje proširene optimizacije
-O3 - uključivanje agresivne optimizacije
-S - izvorni kod se prevodi i dobija program u
asembleru (sa sufiksom ".s")
-Dname=def
-Dname - definicija makro preprocesora. Kao da se nalazi u
izvornom kodu #define "name" "def". Ako se
navede sam -Dname, smatra se da je
dodeljena vrednost "1".
-Uname - ukljanjanje inicijalne vrednosti makro-a preprocesora
-Idir - uključuje "dir" u putanju u kojoj se pretražuju
`#include' datoteke čija imena ne počinju sa `/'
% f77 [ option ] ... file ...
Npr.
% f77 -O3 -c a.f - prevodi "a.f" u "a.o" uz
optimizaciju trećeg nivoa
% f77 -O3 -c main.f - prevodi "main.f" u "main.o" uz
optimizaciju trećeg nivoa
% f77 -o prog a.o main.o - linkuje "a.o" i "main.o" u "prog"
% prog - izvršava program "prog"
Da bi se brzina SGI Power Challenge-a iskoristila nije dovoljno samo prevesti
svoj fortranski program, vec je, na žalost, potrebno program malo i prilagoditi
za njegovu 64-bitnu arhitekturu. Time se mogu postići ubrzanja i do 10 puta!
Fortran na SGI Power Challenge-u, ukoliko se ne koristi opcija -32, podrazumeva 64-bitnu dužinu integer varijabli (INTEGER*8). Ukoliko vaš stari kod podrazumeva neadekvatne veličine podataka (recimo, putem COMMON zona), to može dovesti do netačnih rezultata.
Trivijalna intervencija koja može da spase stvar je zamena deklaracije INTEGER sa INTEGER*4. Implicitne deklaracije (I,J,K..N) u DIMENSION naredbi se moraju takođe zameniti eksplicitnom deklaracijom INTEGER*4.
Kod DOUBLE PRECISION nema problema, jer je on već 64-bitni. FLOAT bi trebalo takođe zameniti sa DOUBLE PRECISION, radi brzine.
Pri prevođenju programa koji se iole duze izvršavaju treba staviti opciju -O3.