[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Wilbert Berendsen]
taraf�ndan Wilbert Berendsen

Yazar hakk�nda:

Wilbert Berendsen is a profesyonel bir m�zisyen ve co�kulu bir Linux kullan�c�s�.�lk olarak Z80 'ler i�in assembly kodlar�n� k�rd�.Bu g�nlerde t�m �al��malar� i�in Linux kullan�yor. Yaln�zca e�lenmek amac�yla giri� niteli�inde yaz�lar� yaz�yor ve bunlar� k���k g�rsely�resinde anlat�yor: http://www.xs4all.nl/~wbsoft/. Kaynak kodlar� a��k olarak !


��erik:

 

��inizi make ile yap�n!

[Illustration]

�eviri : H�lya Karaman

�zet:

Bu yaz� make'in nas�l �al��t��� ve yaz�l�m geli�tirme alan�nda pek �ok �eyde nas�l kullan�ld��� anlat�l�yor.



 

Giri�

Ara s�ra hemen hemen her Linux kullan�c�s�,make'i kullanm��t�r.Bu,bir program veya �ekirdek kaynak kodundan olu�turuldugunda,bir paket kuruldu�unda ve benzeri durumlarda i�ini yapar.'Make' �nemli bir yaz�l�m gelistirme arac�d�r. Bununla beraber,make daha fazla olana�� sa�lar.

Bu yaz�da,g�rece�iz ki;makale veya kitap yazmak ya da g�zel bir g�rsely�re olu�turmak gibi g�nl�k i�lerde,make �ok �nemli bir ara�t�r. Bu sunum s�ras�nda,daha bir �ok 'unix bilgisi' ele al�nacakt�r. Bu hikayenin sonunda,make kullanmak konusunda bir ka� ipucu daha sunulacakt�r. L�tfen dikkat:Biz �u anda Linux hakk�nda konu�uyoruz,fakat make'in kullan�m� her i�letim sisteminde m�mk�nd�r.  

�rnek: bir g�rsely�re olu�turmak

Varsayal�m ki;birden fazla ki�i taraf�ndan yap�land�r�lan bir g�rsel y�re olu�turmak istiyoruz.Can iki sayfay� takip edip,yap�land�r�rken,P�nar d�zenleriyle ilgileniyor.

D�zen ve i�eri�i birbirinden ay�ran basit bir sisteme gereksinim duyar�z. Etkin ��z�m;sayfa her istendi�inde,i�eri�in veritaban�ndan okunmas�d�r.�rne�in,PHP ve Microsoft Active Server Sayfalar� bu �ekilde �al���r.Bununla beraber,sadece basit HTML(HyperText Markup Language) saklama olana��na sahibiz. Ayr�ca,i�erik veritaban�'n� daha etkili yap�land�rmak i�in de�i�miyor.

Baz� basit komutlar kullan�larak bir g�rsely�re kurulabilir.

Mesela, P�nar sitenin ba�l���n�< i>ba�l�k.htmlye , sayfa altl���n� da altl�k.htmlye koyar. ba�l�k.html ��yle g�r�nebilir:

<html><!-- ba�l�k  -->
<head>
<title>P�nar ve Can'�n yap�m�</title>
</head>
<body bgcolor="white">
<table border="0" width="100%"><tr>
<td bgcolor="#c040ff" valign="top">
Bu bizim web sitemiz.<br>
Burda bir tak�m �eyler yaz�yor.<br>
Biz �ok sosyaliz.<br>
i�te telefon numaram�z:<br>
<b>0123-456789</b>
</td><td valign="top">
<!-- ��erikleri buraya koy -->
Bu da sayfa altl��� altl�k.html:
<!-- sayfa altl���  -->
</td></tr></table>
</body></html>
Can'�n i�erik.html'ini son sayfa olarak,unix komutuyla,yerle�tirilmesinin bir �rne�i:
cat ba�l�k.html  /home/can/Docs/g�rsely�re/i�erik.html
echo -n '<hr>Son g�ncelleme: '
tarih '+%A %e %B'
cat altl�k.html
L�tfen bu komutlar�n manual sayfalar�na ba�vurun.Yukar�daki komutlar sonucunda;son dosya standard output'a iletilir ve bu bir dosyada tutulur.
{
  cat ba�l�k.html  /home/can/Docs/g�rsely�re/i�erik.html
  echo -n '<hr>Son g�ncelleme: '
  tarih '+%A %e %B'
  cat altl�k.html
} > /home/p�nar/public_html/i�erik.html
Bu i�lem �teki dosya �neri.html i�in de tekrarlan�r. Asl�nda,g�rsely�remizin i�leyi�ini sa�layacak k���k bir betik (script) yaratm�� olduk.

Bununla beraber,bu komutlar elle �al��t�r�lamaz.Can'�n yapt��� her i�erik de�i�ikli�inde �al��t�r�lan bir kabuk beti�i yaratabiliriz. Ayr�ca,e�er P�nar ba�l��� ve sayfa altl���n� de�i�tirmeye karar verirse de,bu betik �al��t�r�lmal�d�r!Di�er yandan,e�er Can her g�n bir de�i�iklik yapm�yorsa,betik �al��t�r�lmamal�d�r. Linux kullan�yoruz, bu y�zden ak�lc�l bir ��z�m ar�yoruz!

Bu noktada make kendini g�sterir.  

Make'le ilk tan��ma

GNU'nun info-manual'� harika bir dok�mand�r.Bununla beraber,en ba��ndan beribu dok�man programlama �zerine yo�unla��yor.Budan dolay�,make'in fonksiyonunu daha geni� a��dan ele almaya �al���yorum.
    Make,hedef dosya ile kaynak dosyan�n  zaman-damgas�(time-stamp) �zerine
kuruludur ve bir tak�m komutlar dizisinin �al��t�r�l�p �al��t�r�lmayaca��na
karar verir.
Ba�ka bir deyi�le; herbir kaynak dosyas�, bir hedef dosyaya ihtiya� duyar ve kaynak dosya ,hedef dosyadan daha yeniyse;bir tak�m komutlar dizisi �al��t�r�l�r.Bu komutlar hedef dosyan�n yenilenmesini sa�lar.

Hedef dosya 'hedef'tir , kaynak dosyalar� `�nceden gerekli olan'd�r. (ilk istek). Komutlar,e�er bir '�nceden gerekli olan(prerequisites)'kaynak dosyadan daha yeni ise (veya herhangi bir kaynak dosya yoksa),�al��t�r�l�r. E�er b�t�n bu '�nceden gerekli olan'lar kaynak dosyadan eski veya onunla e�it eskilikte ise ,komutlar �al��t�r�lmaz ve 'hedef' g�ncellenmi� kabul edilir.

�imdi bulunan dizinde,ad� Makefile olan bir dosya yarat�lmal�d�r.Bu dosya make'in i�ini gerekti�i gibi yapabilmesi i�in gerekli olan bilgiyi i�erir.Makefile'� edindikten sonra,yapmam�z gereken tek �ey: 'make' yazmam�z ve yeni bir hedef dosya yarat�lmas� i�in gerekli olan komutlar otomatik olarak �al��t�r�l�r.

Make komutla �a��r�l�r.

make hedef1 hedef2 ....

Hedef iste�e ba�l�d�r(e�er hedef silinirse,Makefiledaki ilk dosya kullan�l�r.). Make her zaman Makefile'� bulunulan dizinde arar.Birden fazla hedef sa�lamak m�mk�nd�r.  

Makefile s�zdizimi

Makefile bir edit�rle yarat�labilir ve �una benzer:
# Bu bir Makefile �rne�idir.
# Yorumlar '#'i�aretinden sonra yaz�labilir.

hedef: �nceden gerekli olan
	komut

hedef: �nceden gerekli olan
	komut

# vs...vs...vs...
Hedef ile ba�lad�k,iki nokta �st �ste ile devam ettik (:) ve '�nceden gerekli olan(prerequisites)'a ihtiyac duyduk.Bir�ok '�nceden gerkli olan'�n varl���nda, sat�r� ters slash(\\) ile bitirmek ve di�er sat�rdan devam etmek m�mk�n.

Bir sonraki sat�r(lar)da,bir veya daha fazla komut bulunabilir.Her sat�r tek bir komut olarak d���n�l�r.E�er bir komut i�in birden fazla sat�r kullanmak istiyorsan�z,sat�rlan�r�n sonuna ters slash (\\) koymal�s�n�z.Make onlar� sanki tek bir sat�ra yaz�lm�� gibi ili�kilendirecektir.Bu durumda,�al��t�rma kabuklar�nda meydana gelebilir muhtemel hatalar� �nlemek i�in,komutlar� iki nokta �st �ste (;) ile ay�rmam�z gereklidir.

Not: Komutlar sat�r ba��ndan,8 bo�luk b�rakarak de�il,TAB tu�u ile ayr�lmal�d�r!

Make Makefile'� okuyarak, her bir hedef i�in (ilkinden ba�layarak)komutlar�n �al��t�r�l�p �al��t�r�lmayaca��na karar verir.Her hedef,'�nceden gerekli olan' ve komutlarla beraber 'kural' anlam�na gelir.

E�er Make sorunsuz �al���rsa,sadece ilk hedef �al��t�r�l�r.  

�rne�imiz i�in bir Makefile

�rne�imiz i�in Makefile �u �ekilde olmal�d�r:
# Bu Makefile patates canavar� P�nar ile  Can'�n  g�rsely�resini kurar.

hepsi: /home/p�nar/public_html/i�erik.html /home/p�nar/public_html/�neri.html

/home/p�nar/public_html/i�erik.html:  ba�l�k.html altl�k.html \
                                    /home/can/Docs/g�rsely�re/i�erik.html
	{ \
          cat ba�l�k.html  /home/can/Docs/g�rsely�re/i�erik.html ;\
          echo -n '<hr>Son g�ncelleme: '               ;\
          tarih '+%A %e %B'                                   ;\
          cat altl�k.html                                    ;\
        } > /home/p�nar/public_html/i�erik.html

/home/p�nar/public_html/�neri.html:  ba�l�k.html altl�k.html \
                                    /home/can/Docs/g�rsely�re/�neri.html
	{ \
          cat ba�l�k.html  /home/can/Docs/g�rsely�re/i�erik.html ;\
          echo -n '<hr>Son g�ncelleme: '               ;\
          tarih '+%A %e %B'                                   ;\
          cat altl�k.html                                    ;\
        } > /home/p�nar/public_html/�neri.html

# son

�imdi,�� hedefimiz var, 'hepsi' ve siteden dosyalar i�erik.html ve �neri.html .'hepsi' hedefinin tek fonksiyonu �teki iki dosyay� '�nceden gerekli olan'olarak alg�lamas�d�r.Bunlar test edilmi�tir.��nk� 'hepsi' tek ba��na bir dosya ismi de�ildir,hedef 'hepsi her zaman �al��t�r�l�r. (Daha sonra,dosya olmayan hedefleri tan�tmak i�in daha ��k bir yol sunaca��z.).

E�er ba�l�k ve sayfa altl��� de�i�tirilmi� ise b�t�n sayfalar g�ncellenecektir.E�er Can sadece bir tane dosyas�n� yenilemi� ise sadece yenilenmi� sayfa g�ncellenecektir.�al��t�r�lan 'make' komutu bu i�i yapar.!!

Tabiki,Makefile'�n bir dezavantaj� var : denetlemek kolay de�il! Neyseki,i�leri kolayla�t�rmak i�in pek �ok yol var!  

Makefile'� �ekillendirmek

 

De�i�kenler

Makefile,de�i�kenler sayesinde �ok basitle�tirilebilir.de�i�kenler a�a��daki gibi tan�mlan�r:
de�i�ken = de�er
De�i�kene bir ifade at�yoruz.$(variabele).Bunu Makefile i�ine katarsak,daha iyi �u �ekilde g�r�n�r:
# Bu Makefile patates canavar� P�nar ile Can'�n g�rsely�resini kurar.

# g�rsely�renin bulundu�u dizin:
HEDEFDIR = /home/p�nar/public_html

# Can'�n dizini :
CANDIR = /home/can/Docs/g�rsely�re

# D�zen i�in gerekli dosyalar:
D�ZEN = ba�l�k.html altl�k.html

hepsi: $(HEDEFDIR)/i�erik.html $(HEDEFDIR)/�neri.html

$(HEDEFDIR)/i�erik.html:  $(D�ZEN) $(CANDIR)/i�erik.html
	{ \
          cat ba�l�k.html $(CANDIR)/i�erik.html     ;\
          echo -n '<hr>Son g�ncelleme: '      ;\
          tarih '+%A %e %B'                          ;\
          cat altl�k.html                           ;\
        } > $(HEDEFDIR)/i�erik.html

$(HEDEFDIR)/�neri.html:  $(D�ZEN) $(CANDIR)/�neri.html
	{ \
          cat ba�l�k.html  $(CANDIR)/�neri.html    ;\
          echo -n '<hr>Son g�ncelleme: '      ;\
          tarih '+%A %e %B'                          ;\
          cat altl�k.html                           ;\
        } > $(HEDEFDIR)/�neri.html

# son
De�i�kenler i�in b�y�k harf kullanmak iyi bir al��anl�kt�r.�imdi,de�i�iklik daha kolay.

E�er isterseniz,do�ru d�zen elde etmek i�in tan�mlanm�� ba�ka bir method daha var.E�er b�t�n dokumanlar ayn� ��kt�ya konmas� gerekiyorsa ne yapmal�y�z?�ok fazla tekrar, Makefile'�n boyutunu �okca b�y�tebilir. Bu da basitle�tirilebilir.  

Model kurallar

`Model kurallar' ayn� komutlar dizisini farkl� hedefler �zerinde kullanabilmemizi sa�lar.

E�er model kuralar kullan�l�yorsa,sat�rlar�n yap�s� bir tane daha model eleman� eklenerek de�i�ecektir:

�oklu hedef: model : �nceden gerekli olan �nceden gerekli olan...
	komut
Model,b�t�n hedefler uygulanabilecek bir ifade olmal�d�r.y�zde i�areti(%)de�i�ken b�l�mleriyle hedef isimleri birbirinden ay�rmak i�in kullan�l�r.

Bir �rnek:

/home/bla/hedef1.html /home/bla/hedef2.html: /home/bla/% : %
	komutlar
Make bunu okurken ikisat�ra geni�letir ve iki sat�rm�� gibi alg�lar.Burda model hedef ismin hangi y�zde i�areti ile ili�kili oldu�una karar verir.

�nceden gerekli olanlar k�sm�ndaki y�zde i�aretleri ise y�zde i�aretleri ile kopyalanan b�l�mleri yerine kullan�l�r.

Make yukar�dakini �u �ekilde geni�letir:

/home/bla/hedef1.html:	hedef1.html
	komutlar

/home/bla/hedef2.html: hedef2.html
	komutlar
`/home/bla/%' modelindeki y�zde i�areti, `/home/bla/hedef1.html' hedefiyle `hedef1.html'de�erini al�r,b�ylelikle �nceden gerekli olan `%' `hedef1.html'e geni�letilmi� olur.

Bizim �rnek g�rsely�remiz i�in,a�a��daki komutlar kullan�lmal�d�r:

$(HEDEFDIR)/i�erik.html $(HEDEFDIR)/�neri.html: $(HEDEFDIR)/% : $(CANDIR)/% \
                                                  $(D�ZEN)
Geriye bir tek bu de�i�kenleri komutlar�m�zda nas�l kullanabiliriz sorusu kald�. Hedefler komutlardan biraz daha farkl�.  

Otomatik de�i�kenler

Ka��n�lmaz ki;make kendi i�inde tan�ml� birtak�m de�i�kenlere sahiptir.Bu baz� de�i�kenlere otomatik de�i�ken ad� verilir.Bu de�i�kenler komutlar�n �al��t�r�lmas� s�ras�nda (daha a��k olarak:komutlar �al��t�r�lmadan az �nce) hedef ve/veya �nceden gerekli olanlar�n de�erini al�r.

�zel de�i�ken $\ , ilk gerekli olan� i�aret etmekte kullan�l�r ve $@ de�i�keni o anki dizine geni�letir.

Bu de�i�kenleri kullanarak,a�a��daki tamamlanm�� kurallara ula�mak m�mk�n:

$(HEDEFDIR)/i�erik.html $(HEDEFDIR)/�neri.html: $(HEDEFDIR)/% : $(CANDIR)/% \
                                                  $(D�ZEN)
	{ \
          cat ba�l�k.html  $<                       ;\
          echo -n '<hr>Son g�ncelleme: '      ;\
          tarih '+%A %e %B'                          ;\
          cat altl�k.html                           ;\
        } > $@
��te,bu tek sat�rl�k fonksiyonlar her bir dosya i�in ge�erli!

Daha fazla tutarl�l�k i�in Makefile ,daha �ok olumlu y�n sunmaktad�r:

# Bu Makefile'� patates canavar� P�nar ile Can'�n g�rsely�resini kurar.

# g�rsely�renin bulundu�u dizin:
HEDEFDIR = /home/p�nar/public_html

# Can'�n dizini:
CANDIR = /home/can/Docs/g�rsely�re

# D�zen i�in gerekli dosyalar:
D�ZEN = ba�l�k.html altl�k.html

# Web sayfas�:
DOCS = $(HEDEFDIR)/i�erik.html $(HEDEFDIR)/�neri.html


# L�tfen  a�a��daki sat�rdan sonras�n� de�i�tirmeyin:-) )
# -------------------------------------------------------------

hepsi: $(DOCS)

$(DOCS): $(HEDEFDIR)/% : $(CANDIR)/% $(D�ZEN)
	{ \
          cat ba�l�k.html  $<                       ;\
          echo -n '<hr>Son g�ncelleme: '         ;\
          tarih '+%A %e %B'                          ;\
          cat altl�k.html                           ;\
        } > $@

# son
G�r�nmesi gerekti�i gibi olmaya ba�l�yor.E�ger daha fazla dok�man eklenirse,daha fazla yazmaya gerek kalmadan, DOCS de�i�keniyle Makefile'da bunlar� ili�kilendirmek m�mk�n.

Sonunda,nas�l �al��t��� hakk�nda hi� bir sorusu kalmadan Makefile'�n nas�l kolayl�kla �al��t���n� g�rebiliriz!  

Son k���k iyile�tirmeler

DOCS'daki dok�manlar� b�t�n dizini eklemeksizin belirtebiliriz.Bu a�a��daki �ekilde yap�labilir(makefile'daki DOCS'u TEXTS'e �eviriyoruz):
TEXTS = i�erik.html  �neri.html  veba�kabirdosya.html

# L�tfen a�a��daki sat�rdan sonras�n� de�i�tirmeyiniz;-)
# -------------------------------------------------------------
DOCS =  $(addprefix $(HEDEFDIR)/,$(TEXTS))

hepsi: $(DOCS)

# vs..vs..
Burda g�rd���m�z de�i�kenler yerine kullanabilece�imiz bir make fonksiyonudur,parantezler aras�na tamamlanm�� ifadeler koymak m�mk�n.Bu �ekilde texts'i birden fazla yolla ifade etmek de m�mk�n.

$(addprefix prefix,list) �zel komutu sat�rdaki t�m elemanlar� birbirine bir �nekmi� gibi ekler.Bu �rnekte,HEDEFDIR de�i�keninin i�eri�i art� slashdir.

Listelenmi� ara�lar bo�luk(space)larla birbirinden ayr�l�r.Bu sebepten dolay�,make komutlar�yla ,dosya ad�nda bo�luk olan dosyalar� i�leme sokmak iyi bir fikir de�ildir.

Eklemek gerekirse:ba�ta da belirtti�imiz gibi 'hepsi' hedefi 'hepsi' ad�nda bir dosya yaratmaz ve sonu� olarak da,bu hedef her zaman �al��t�r�l�r.<Tesad�fen> ayn� ad� ta��yana ve di�erlerinden yeni olan bir dosyan�n varl��� s�z konusu oldu�unda ne olur..?

Bunu make'e anlatman�n ve hedefin hard diskte belli bir dosya belirtmemesini, belli bir hedefin s�rekli �al��t�r�lmas�n� sa�layan kolay bir yolu var.Bunu sa�lamak i�in;hedef 'phony' (ger�ek de�il) olarak tan�mlan�r.Ve ��yle yap�l�r:

.PHONY: hepsi
�imdi t�m Makefile ��yle g�z�k�r:
# Bu Makefil'� patates canavar� P�nar ve Can'�n g�rsely�resini kurar.

# g�rsely�renin bulundu�u dizin:
HEDEFDIR = /home/p�nar/public_html

# Can'�n dizini:
CANDIR = /home/can/Docs/g�rsely�re

# D�zen i�in gerekli dosyalar:
D�ZEN = ba�l�k.html altl�k.html

# Websayfas�n� isimleri:
TEXTS = i�erik.html  �neri.html  veba�kabirdosya.html

# L�tfen a�a��daki sat�rdan sonras�n� de�i�tirmeyiniz;-)
# ------------------------------------------------------
DOCS =  $(addprefix $(HEDEFDIR)/,$(TEXTS))
.PHONY: hepsi

hepsi: $(DOCS)

$(DOCS): $(HEDEFDIR)/% : $(CANDIR)/% $(D�ZEN)
	{ \
          cat ba�l�k.html  $<                       ;\
          echo -n '<hr>Son g�ncelleme: '         ;\
          tarih '+%A %e %B'                          ;\
          cat altl�k.html                           ;\
        } > $@

# son
Bu dosyay� saklay�n ve unutun!Bu andan itibaren,websayfan�z� olu�turmak ve d�zeni i�erikten tamamen ay�rmak m�mk�n!  

Son s�z

Tabiki,bu �rne�i ba�ka durumlar i�in de kullanmak m�mk�n.

�rne�in,yarat�lm�� bir dok�man�n bir hataya sebep olmas� o kadar da kolay de�il:E�er Can yanl��l�kla makalesin </body></html> �eklinde isimlendirirse bu P�nar'�n yapt��� altl���n pek �ok browser taraf�ndan g�sterilememesine neden olur. Bununla beraber, Can textlerini LyXda veya lyx2html gibi bir program kullanarak yazm�� da olabilir.�e�itli olanaklar vard�r!

Resimlerin web dizinine ta��nma m�mk�nl���n� hen�z konu�mad�k.Bu i�lemi otomatikle�tirmekte m�mk�n!

Bu �rnekte, P�nar Can'�n g�rsely�re dizini okuma hakk�na sahip olmal�d�r.Bu i�in ilgin� yan� �ok b�y�k d�zenlemelere uygulanabilir olmas�d�r.P�nar'�n d�nyan�n bir ucundan login olmas� veya NFS arac�l��� ile kendi dizinini kurmas� bile m�mk�n.Tek ki�i taraf�ndan y�r�t�len �al��malar� da bu �ekilde olu�turmmak m�mk�n.

Sonunda,Makefile prensibini a��kl��a kavu�turmu� ve iyi bir Makefile yaz�ld���nda g�nl�k i�lerimizi ne kadar kolayl��t�rd���n� g�rm�� olduk!  

�neriler

 

Daha fazla bilgi

Make'in nas�l �al��t��� ve di�er olanaklar� hakk�nda daha fazla bilgi `GNU Make Manual'da bulunmaktad�r.Bu manual'a Linux'da �u komutla ula�abilirsiniz:
info make
Tabiki,GNU Make Manual'�na GNOME ve KDE yard�mc� browserlar�n�n yan� s�ra elle tkinfo program�yla ula�abilirsiniz.

Make hakk�nda daha fazla bilgi bulabilece�iniz linkler:

�yi e�lenceler!  

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Wilbert Berendsen, FDL
LinuxFocus.org

Buray� klikleyerek hatalar� rapor edebilir ya da yorumlar�n�z� LinuxFocus'a g�nderebilirsiniz
�eviri bilgisi:
nl -> -- Wilbert Berendsen
nl -> en Philip de Groot
en -> tr H�lya Karaman

2001-08-03, generated by lfparser version 2.17