background image

Podstawy Informatyki (semestr I) 

 

laboratorium 3 

 

1

Kompilacja i scalanie programów C w linii polece

ń

 (LINUX) 

Uwaga! 
W poni

Ŝ

szym tek

ś

cie ka

Ŝ

de wyra

Ŝ

enie typu <x> oznacza miejsce wstawienia odpowiedniej nazwy 

opisywanej przez x. Symbol [x] oznacza wyst

ę

powanie x zero lub jeden raz.  

 

Kompilowanie plików 

ź

ródłowych C do postaci plików obiektów wymaga u

Ŝ

ycia opcji „-c”. 

gcc -c <nazwa_pliku>.c  

W wyniku otrzymuje si

ę

 plik obiektu  

<nazwa_pliku>.o  

Je

ś

li plik nagłówka (.h) nie znajduje si

ę

 w bie

Ŝą

cym katalogu ani w 

Ŝ

adnym z katalogów zawieraj

ą

cych 

nagłówki standardowych bibliotek to przy kompilacji stosowana jest opcja –I <katalog_naglowka> . 
(du

Ŝ

e 'i') 

gcc –c –I <katalog_naglowka> <nazwa_pliku>.c  

Aby wytworzy

ć

 kod produkcyjny korzystamy z ustawienia 3 poziomów optymalizacji poprzez opcj

ę

 „-

Ox” (x=0,1,2.3). Poziom „-O2” jest odpowiedni dla wi

ę

kszo

ś

ci programów. 

Scalanie plików obiektów w program wykonywalny wymaga u

Ŝ

ycia opcji „-o” 

gcc –o <nazwa_celu> <nazwa_pliku1>.o <nazwa_pliku2>.o … 

<nazwa_celu> oznacza nazw

ę

 pliku wykowywalnego, która mo

Ŝ

e, ale nie musi mie

ć

 

Ŝ

adnego 

konkretnego rozszerzenia (takiego jak np. „exe” w systemie Windows).  
W wielu systemach uniksowych mo

Ŝ

na poł

ą

czy

ć

 kompilacj

ę

 i scalanie plików w jednym poleceniu:  

gcc –o <nazwa_celu> <nazwa_pliku1>.c <nazwa_pliku2>.c …  

Archiwum (bilbioteka statyczna) to zestaw wielu plików obiektów przechowywanych w pojedynczym 
pliku o rozszerzeniu „.a”. Tworzy si

ę

 je poleceniem „ar” z opcjami „cr”: 

ar -crs lib<nazwa_bilbioteki>.a <nazwa_pliku1>.o <nazwa_pliku2>.o …  

Archiwum doł

ą

cza si

ę

 na etapie scalania plików obiektów w program wykonywalny z wykorzystaniem 

opcji „-L” i „-l”. (małe 'el') 
„-L<nazwa_katalogu>”: wskazuje poło

Ŝ

enie niestandardowe pliku biblioteki – poza typowo 

przeszukiwanymi katalogami „/lib”, „/usr/lib” i katalogami opisanymi w 

ś

cie

Ŝ

kach zmiennej 

ś

rodowiskowej „LD_LIBRARY_PATH”. 

„-l<nazwa_biblioteki>”: opcja scalania wybranej biblioteki z naszym programem wykonywalnym 
(celem). 
gcc –o <nazwa_celu> <nazwa_pliku1>.c <nazwa_pliku2>.c … -L<nazwa_katalogu_biblioteki> 
-l<nazwa_biblioteki>
  

background image

Podstawy Informatyki (semestr I) 

 

laboratorium 3 

 

2

Kompilacja i scalanie programów C poprzez polecenie „make” (LINUX) 

Polecenie „make” szuka w bie

Ŝą

cym katalogu pliku tekstowego o nazwie „makefile” lub „Makefile” w 

podanej kolejno

ś

ci. Plik ten zawiera reguły opisuj

ą

ce dla „make” co budowa

ć

 (wykonywa

ć

 ) i w jaki 

sposób. Reguły pliku make maj

ą

 nast

ę

puj

ą

c

ą

 form

ę

 ogóln

ą

:  

 
<nazwa_celu>: <zale

Ŝ

no

ść

> [<zale

Ŝ

no

ść

>] […] 

<tabulator> <polecenie> 
[<tabulator> <polecenie>] 
[…]
  

Cel jest plikiem binarnym(wykonywalnym) lub obiektowym (.o), który chcemy utworzy

ć

Polecenia s

ą

 krokami takimi jak wywołania kompilatora lub polece

ń

 powłoki koniecznymi dla 

utworzenia celu. 
Je

ś

li cel nie istnieje „make” go buduje zgodnie z poleceniem. W przeciwnym razie porównuje daty 

tworzenia celu z datami jego zale

Ŝ

no

ś

ci. Je

ś

li s

ą

 one pó

Ŝ

niejsze ni

Ŝ

 cel (przynajmniej jedna) cel 

podlega przebudowaniu, bo zmienił si

ę

 jaki

ś

 kod. 

Przykład:  
 
prog.e: m1.o m2.o 
           gcc –o prog.e m1.o m2.o  
 
m1.o:  m1.c m1.h  
           gcc –c m1.c  
 
m2.o:  m2.c m1.h 
           gcc –c m1.c  
 
clean:  
           rm *.o *.e
  

Wybrane zmiene automatyczne stosowane w plikach “make”: 
$@ -symboliczna nazwa pliku celu w regule  
$* -rdze

ń

 nazwy pliku (bez rozszerzenia po kropce)  

$< -nazwa pliku pierwszej zale

Ŝ

no

ś

ci od reguły  

$^ -lista wszystkich zale

Ŝ

no

ś

ci w regule 

$? - lista zale

Ŝ

no

ś

ci nowszych ni

Ŝ

 cel  

Zmienne lokalne w plikach „make” sa przypisywane ró

Ŝ

nym poleceniom na pocz

ą

tku skryptu. 

Przypisanie takie (nierekursywne) ma posta

ć

<zmienna>:=<polecenie lub warto

ść

>  

np. : 
CC := gcc  
CFLAGS := -g  

Odwołanie do takich zmiennych wyst

ę

puje w formie $(<zmienna>) 

np. : 
$(CC)  
$(CFLAGS)
  

Ogólna reguła kompilacji plików 

ź

ródłowych C w poleceniu „make” z u

Ŝ

yciem zmiennych 

automatycznych mo

Ŝ

e mie

ć

 posta

ć

:  

 
.c.o: 
           $(CC) $(CFLAGS) –c $*.c 
 
 
 

background image

Podstawy Informatyki (semestr I) 

 

laboratorium 3 

 

3

B

ę

dzie ona niejawnie cytowana przy tworzeniu celu: 

 
<plik_wykonywalny>: <plik>.o <plik>.o …  
           $(CC) $(CFLAGS) $^ -o $@ 
 
<plik>.o: <plik>.c <plik>.c … 
<plik>.o: <plik>.c <plik>.h …
  

Przykład prostego pliku ”Makefile” z u

Ŝ

yciem reguł niejawnych, zmiennych lokalnych i zmiennych 

automatycznych:  
 
CC := gcc 
CFLAGS := -g  
 
.c.o:  
           $(CC) $(CFLAGS) –c $*.c  
 
prog.e: m1.o m2.o 
           $(CC) $(CFLAGS) $^ -o $@  
 
m1.o: m1.c m1.h 
m2.o: m2.c m2.h 
 
clean:  
           rm –f *.o *.e
  

W jednym pliku „Makefile” mo

Ŝ

na definiowa

ć

 wiele ró

Ŝ

nych celów – kompilowa

ć

 i scala

ć

 wiele 

programów. Wywołanie „make” odbywa si

ę

 z odpowiednim parametrem stanowi

ą

cym nazw

ę

 celu i 

mo

Ŝ

e zawiera

ć

 opcje: 

 
make [-<opcje>] <nazwa_celu lub plik_wykonywalny>  
np.:  
make prog.e  
make clean.
  

Wybrane opcje polecenia “make”(nie musz

ą

 wyst

ę

powa

ć

): 

-n : polecenia s

ą

 składane i wy

ś

wietlane, ale nie wykonywane (dobre do testów)  

-I <katalog> : katalog do poszukiwania plików make poza katalogiem bie

Ŝą

cym (du

Ŝ

e 'i') 

-s : (silent) make nie wypisuje polece

ń

 na ekranie 

-f <plik> : nazwa pliku make inna ni

Ŝ

 „makefile” lub „Makefile” 

-k : nie przerywa działania je

ś

li nie uda si

ę

 zbudowa

ć

 jednego z celów  

-d : (debug) wy

ś

wietlane s

ą

 informacje debugowania 

-W<plik> : wykonuje si

ę

 tak jakby wymieniony plik był zmodyfikowany (do testowania) 

Uwaga! 
W systemie UNIX BSD nale

Ŝ

y zastosowa

ć

 polecenie gmake (GNU make) aby móc budowa

ć

 pliki 

„make” w formie charakterystycznej dla Linuxa.  

background image

Podstawy Informatyki (semestr I) 

 

laboratorium 3 

 

4

Zadania do wykonania 

 

Celem 

ć

wiczenia jest opanowanie umiej

ę

tno

ś

ci kompilacji i uruchamiania programów konsolowych C 

w systemie UNIX/Linux.  

1.  Zalogowa

ć

 si

ę

 na własne konto na serwerze Katedry Informatyki Stosowanej poprzez 

WinSCP i rozpocz

ąć

 prac

ę

 w konsoli. 

2.  Utworzy

ć

 w podkatalogu „programy” pliki 

ź

ródłowe j

ę

zyka C -„main.c”, „modul.c” oraz plik 

nagłówkowy „modul.h”. Wpisa

ć

 przy pomocy dowolnego edytora tre

ś

ci plików podane 

studentom przez prowadz

ą

cego laboratorium. Tre

ś

ci zawieraj

ą

 napisy powitalne j

ę

zyka C 

wy

ś

wietlane w konsoli.  

3.  Skompilowa

ć

 pliki 

ź

ródłowe C przy pomocy polecenia „gcc” z opcj

ą

 „-c” w celu uzyskania 

plików obiektów (.o). Utworzy

ć

 plik programu wykonywalnego „witaj.e” poprzez scalanie 

wytworzonych plików obiektów poleceniem „gcc” z opcj

ą

 „–o”. Uruchomi

ć

 program. 

4.  Skompilowa

ć

 i scali

ć

 powy

Ŝ

sze pliki 

ź

ródłowe w program wykonywalny jednym poleceniem 

„gcc”, bez etapu po

ś

redniego wytwarzania plików obiektów. Uruchomi

ć

 program.  

5.  Przemie

ś

ci

ć

 nagłówek „modul.h” do katalogu nadrz

ę

dnego dla katalogu „programy” i 

wykorzysta

ć

 opcj

ę

 „-I” (du

Ŝ

e 'i') polecenia „gcc” do ustalenia jego poło

Ŝ

enia. Sprawdzi

ć

 

działanie opcji „-O”, „-W”, „-ansi” w procesie kompilacji i scalania.  

6.  Utworzy

ć

 archiwum statyczne „libmodul.a” z pliku „modul.o” przy pomocy polecenia „ar” z 

odpowiednimi opcjami. Skompilowa

ć

 i scali

ć

 „witaj.e” poleceniem „gcc” z opcjami „-L” oraz „-l” 

(małe 'el') słu

Ŝą

cymi do podł

ą

czania biblioteki. Uruchomi

ć

 program z podł

ą

czon

ą

 bibliotek

ą

 

statyczn

ą

.  

7.  Utworzy

ć

 w katalogu bie

Ŝą

cym plik „makefile” zawieraj

ą

cy dwa cele: 

   „witaj.e” – kompilacja i scalanie programu wynikowego o nazwie zgodnej z nazw

ą

 celu, w 

oparciu o 

ź

ródła C z punktu 2  

   „clean” – usuni

ę

cie z bie

Ŝą

cego katalogu wytworzonych plików obiektów (.o) i pliku 

wykonywalnego 
Opisa

ć

 cel: 

   a) bez 

Ŝ

adnych zmiennych automatycznych, 

   b) z u

Ŝ

yciem wybranych zmiennych („$@, $<,$^,$?”) 

Zastosowa

ć

 predefiniowan

ą

 nazw

ę

 kompilatora, zdefiniowa

ć

 własne nazwy wewn

ę

trzne opcji i 

kompilatora.  

8. 

Wykona

ć

 przygotowane zadania „make” poleceniem: 

make <opcje> <nazwa celu> (dla LINUX)  
gmake <opcje> <nazwa celu> (dla UNIX BSD)  
bez u

Ŝ

ycia 

Ŝ

adnych opcji; nast

ę

pnie sprawdzi

ć

 działanie opcji „-k”, „ I” (du

Ŝ

e 'i'), „-d”.