Drozowski Jezyk asembler dla kazdego 

[ Pobierz całość w formacie PDF ]

wykonuje komendy w nim zawarte. Teraz zajmiemy się omówieniem podstaw składni pliku Makefile.
W pliku takim są zadania do wykonania. Nazwa zadania zaczyna się w pierwszej kolumnie, kończy
dwukropkiem. Po dwukropku są podane nazwy zadań (lub plików) , od wykonania których zależy wykonanie
tego zadania. W kolejnych wierszach są komendy służące do wykonania danego zadania.
UWAGA: komendy NIE MOG zaczynać się od pierwszej kolumny! Należy je pisać je po jednym
tabulatorze (ale nie wolno zamiast tabulatora stawiać ośmiu spacji).
Aby wykonać dane zadanie, wydajemy komendę make nazwa_zadania. Jeśli nie podamy nazwy zadania
(co jest często spotykane), wykonywane jest zadanie o nazwie all (wszystko).
A teraz krótki przykład:
(przeskocz przykład)
all: kompilacja linkowanie
echo "Wszystko zakonczone pomyslnie"
kompilacja:
nasm -O999 -f obj -o plik1.obj plik1.asm
nasm -O999 -f obj -o plik2.obj plik2.asm
nasm -O999 -f obj -o plik3.obj plik3.asm
tasm /z /m plik4.asm
tasm /z /m plik5.asm
tasm /z /m plik6.asm
linkowanie: plik1.obj plik2.obj plik3.obj plik4.obj plik5.obj plik6.obj
alink -o wynik.exe plik1.obj plik2.obj plik3.obj plik4.obj \
plik5.obj plik6.obj -c- -oEXE -m-
help:
echo "Wpisz make bez argumentow"
Ale MAKE jest mądrzejszy, niż może się to wydawać!
Mianowicie, jeÅ›li stwierdzi, że wynik.exe zostaÅ‚ stworzony PÓyNIEJ niż pliki .obj podane w linii zależnoÅ›ci,
to nie wykona bloku linkowanie, bo nie ma to sensu skoro program wynikowy i tak jest aktualny. MAKE robi
tylko to, co trzeba. Oczywiście, niezależnie od wieku plików .obj, dział kompilacja i tak zostanie wykonany
(bo nie ma zależności, więc MAKE nie będzie sprawdzał wieku plików).
Znak odwrotnego ukośnika \ powoduje zrozumienie, że następna linia jest kontynuacją bieżącej, znak
krzyżyka # powoduje traktowanie reszty linijki jako komentarza.
92 Bogdan Drozdowski
2007-11-12 Język asembler dla każdego Bogdan Drozdowski
Jeśli w czasie wykonywanie któregokolwiek z poleceń w bloku wystąpi błąd (ściśle mówiąc, to gdy błąd
zwróci wykonywane polecenie, jak u nas TASM czy NASM), to MAKE natychmiast przerywa działanie z
informacją o błędzie i nie wykona żadnych dalszych poleceń (pamiętajcie więc o umieszczeniu w zmiennej
środowiskowej PATH ścieżki do kompilatorów).
W powyższym pliku widać jeszcze jedno: zmiana nazwy któregoś z plików lub jakieś opcji sprawi, że trzeba
ją będzie zmieniać wielokrotnie, w wielu miejscach pliku. Bardzo niewygodne w utrzymaniu, prawda?
Na szczęście z pomocą przychodzą nam ... zmienne, które możemy deklarować w Makefile i które zrozumie
program MAKE.
Składnia deklaracji zmiennej jest wyjątkowo prosta i wygląda tak:
NAZWA_ZMIENNEJ = wartosc
A użycie:
$(NAZWA_ZMIENNEJ)
Polecam nazwy zmiennych pisać wielkimi literami w celu odróżnienia ich od innych elementów. Pole
wartości zmiennej może zawierać dowolny ciąg znaków.
Jeśli chcemy, aby treść polecenia NIE pojawiała się na ekranie, do nazwy tego polecenia dopisujemy z przodu
znak małpki @, np.
@echo "Wszystko zakonczone pomyslnie"
Uzbrojeni w te informacje, przepisujemy nasz wcześniejszy Makefile:
(przeskocz drugi przykład)
# Mój pierwszy Makefile
NASM = nasm # ale można tu w przyszłości wpisać pełną ścieżkę
NASM_OPCJE = -O999 -f obj
TASM = tasm
TASM_OPCJE = /z /m
ALINK = alink
ALINK_OPCJE = -c- -oEXE -m-
PLIKI_OBJ = plik1.obj plik2.obj plik3.obj plik4.obj plik5.obj plik6.obj
PROGRAM = wynik.exe
all: kompilacja linkowanie
@echo "Wszystko zakonczone pomyslnie"
kompilacja:
$(NASM) $(NASM_OPCJE) -o plik1.obj plik1.asm
$(NASM) $(NASM_OPCJE) -o plik2.obj plik2.asm
$(NASM) $(NASM_OPCJE) -o plik3.obj plik3.asm
$(TASM) $(TASM_OPCJE) plik4.asm
$(TASM) $(TASM_OPCJE) plik5.asm
$(TASM) $(TASM_OPCJE) plik6.asm
linkowanie: $(PLIKI_OBJ)
$(ALINK) -o $(PROGRAM) $(PLIKI_OBJ) $(ALINK_OPCJE)
help:
Bogdan Drozdowski 93
Bogdan Drozdowski Język asembler dla każdego 2007-11-12
@echo "Wpisz make bez argumentow"
Oczywiście, w końcowym Makefile należy napisać takie regułki, które pozwolą na ewentualną kompilację
pojedynczych plików, np.
plik1.obj: plik1.asm plik1.inc
$(NASM) $(NASM_OPCJE) -o plik1.obj plik1.asm
Choć na razie być może niepotrzebna, umiejętność pisania plików Makefile może się przydać już przy
projektach zawierających tylko kilka modułów (bo nikt nigdy nie pamięta, które pliki są aktualne, a które nie).
O tym, ile Makefile może zaoszczędzić czasu przekonałem się sam, pisząc swoją bibliotekę - kiedyś
kompilowałem każdy moduł z osobna, teraz wydaję jedno jedyne polecenie make i wszystko się samo robi.
Makefile z biblioteki jest spakowany razem z nią i możecie go sobie zobaczyć.
Poprzednia część kursu (Alt+3)
Kolejna część kursu (Alt+4)
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)
94 Bogdan Drozdowski
2007-11-12 Język asembler dla każdego Bogdan Drozdowski [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • stargazer.xlx.pl