7 Nisan 2009 Salı

Makefile

Makefilelar toplu komutlar iceren dosyalardır.Bu toplu komutlar yazdıgın programdaki C/C++ komutlarını derlemek icin gereken komutlardır. Belli bir yazım kuralı vardır ( girintileri tab ile vermek , iki nokta ust uste kullanmak vb. )ve yazarken en onemli seylerden biri hangi dosyanın hangisine bagımlılıgı oldugunu bilmektir.

hedef: bagımlılıkları
command
command

Basitce bi makefile yazmak gerekirse

all: makarna

makarna: makarna.o sos.o
gcc makarna.o sos.o -o makarna

makarna.o: makarna.c makarna.h su.h tuz.h yag.h
gcc -c makarna.c

sos.o: sos.c sos.h salca.h yogurt.h
gcc -c sos.c

clean:
-rm *.o *.~ core makarna

Bu dosyayı makefile adı ile ( herhangi bi uzantısı yok ) diger kaynak dosyalarınızın yanına korsanız daha sonrada "make all" komutunu calıstırısanız calıstırılabilir bir makarna elde etmis olursunuz."make clean" komutunu calıstırırsanız da olusan butun ".o" ve ".~" uzantılı dosyaları silmis olursunuz.

Yazdıgımız makefile i biraz acıklamak gerekirse oncelikle all komutu ile sonucta olusacak calıstırılabilir programın adını belirttik.Daha sonra bu calıstırılabilir makarna dosyamız icin nelerin olması gerektigini soyledik ve bunlarla birlikte makarnayı nasıl olusturacagının komutunu girdik.Makarna calıstırılabilir dosyasını olusturmak icin makarna.o ve sos.o olusturmak gerekiyordu fakat bunlar ortamda bulunmadıgı icin bunları olusturacak satırları yazdık.Makarna.o yu olusturmak icin makarna.c makarna.h su.h tuz.h ve yag.h dosyalarına ihtiyacımız oldugunu belirttikten sonra makarna.o nun nasıl olusturulacagını girdik.Tabi iyi bir makarna icin sos da sarttır bunun icin sosumuzu da olusturduk sos olusturmak icin de ihtiyacımız olanlar sos salca ve yogurttu bunları belirttikten sonra nasıl olusturulacagını girdik.

Artık makefile en basit hali ile bu kadar tabiki daha fonksyonel yapmak icin sabitler tanımlayabilirsiniz ve de acıklama satırları girebilirsiniz.
Sabit tanımlamak icin

DERLEYICIM=gcc seklinde tanımlarsınız
$( DERLEYICIM ) diye de kullanırsınız.

Acıklama satırı yazmak icin de diyez isaretini kullanabilirsiniz
#ben bir acıklama satırıyım

Kolay gelsin.

Hiç yorum yok: