E-Bilisim Uzmanı | Yeni Tema
imleme

Ana Sayfa Hakkımızda İletişim Videolar Yorumlar Arşiv
Full Sürüm Oyunlar Full Sürüm Programlar Full Sürüm APK Full Sürüm İOS

Make Dosyalarının Oluşturulması

Birden fazla modülle ve kütüphanelerle çalışıldığı durumlarda etkin bir build işlemi için
yalnızca değişen dosyaların yeniden derlenmesi gerekir. Tabii bütün dosyaların ne olursa
olsun hep birlikte link edilmesi mutlaka gerekmektedir (son yıllarda daha önce link edilmiş
bir dosyayı daha kolay link edebilmek için artırımlı linker’lar geliştirilmiştir). Birden fazla
modülle çalışıldığı durumlarda derleyicilerin tümleşik çevreli uyarlamalarında proje dosyası
kavramı bu işi yürütmek için kullanılmaktadır. Bu yöntemde projeye çeşitli dosyalar eklenir,
programcının yapacağı tek şey projeyi build yapmaktır. Komut satırından idare edilen
derleyici sistemlerinde proje dosyası yerine make dosyası kullanılır.


Make dosyası bir text dosyası biçimindedir. Sanki kuralı olan küçük bir dile sahiptir.
Programcı make dosyası içerisinde hangi dosyalar değiştiğinde hangi işlemlerin yapılacağını
belirtir. Make dosyaları make isimli bir program tarafından okunarak yorumlanır.
Make programı komut satırı argümanı vermeden çalıştırılırsa otomatik olarak makefile ve
Makefile isimli dosyaları araştırır. Yani böyle bir dosya varsa tek yapacağımız şey ilgili
dizine geçip make programını çalıştırmaktır. Make dosyasını belirleyerek make yapmak için
make –f <dosya_ismi>
yapılır.


cc, gcc ve ld Programları
Unix sistemlerinin C derleyicileri klasik olarak cc ismine sahiptir. Pek çok kurum tarafından
yazılmış ayrı cc derleyicileri vardır. Linux sistemlerinde GNU projesi kapsamında yazılmış
olan gcc derleyicisi kullanılır. Ancak bu sistemlerde cc softlink olarak gcc’ye bağlı bir
biçimde de bulundurulmaktadır. cc derleyicisi –c seçeneği kullanılmamışsa önce derleme
işlemini yapar, sonra ld linker’ını çağırarak link işlemini yapar. cc linker’ı çağırırken startup
modülü ve libc.a kütüphanesini de işleme dahil etmektedir. libc.a ya da libc.so hem standart C
fonksiyonlarını hem de POSIX fonksiyonlarını içermektedir (POSIX’e sonradan katılmış olan
fonksiyonlar başka kütüphanelerde bulundurulmuştur. Örneğin thread fonksiyonları
libpthread.a ya da libpthread.so dosyalarında bulunur). cc derleyicisi kendi içerisinde linker’ı
da çağırdığına göre cc sanki bir linker’mış gibi de kullanılabilmektedir. Örneğin x.c isimli bir
dosya ayrı ayrı derlenip link edilecekse şöyle bir yöntem izlenir:
cc –c x.c
ld –o x –lc /usr/lib/crt0 x.o

Burada görüldüğü gibi startup modül ve C kütüphanesi ayrıca işleme sokulmuştur. startup
modül değişik bir dizinde ve değişik bir isimde olabilir. Buradaki aynı işlem hiç linker
kullanılmadan şöyle de yapılabilirdi:
cc –c x.c
cc –o x x.o

Aslında –o seçeneği derleyicinin değil, linker’ın bir seçeneğidir. Yani bazı seçenekler
doğrudan linker’a aktarılırlar:
cc –o x x.c


Make Dosyalarının İçeriği
Make dosyaları kurallardan oluşur. Bir kuralın genel biçimi şöyledir:
dosya_ismi : dosya_ismi à Bağımlılık (dependency)
yapılacak işlem
:’nin solunda ve sağında aralarında boşluk bırakılmış biçimde birden fazla dosya bulunabilir.
: satırına bağımlılık (dependency) denilmektedir. Bağımlılık şu anlama gelir: :’nin sağındaki
dosyalardan herhangi birinin tarih ya da zamanı solundaki dosyalardan her hangi birinin tarih
ya da zamanından daha yeniyse aşağıda belirtilen işlem yapılacaktır. Kurallar sondan başa
doğru yazılırlar.
# deneme
X : a.o b.o
cc –o x a.o b.o
a.o : a.c
cc –c a.c
b.o : b.c
cc –c b.c
a.o b.o : x.h

# karakteri yorumlama için kullanılır. Kuralların sırası önemlidir. Bir kural başka bir kurala
bağlı ise bağlı olan kural yukarı yazılır. Yani sondan başa doğru bir yazım biçimi
uygulanmalıdır. Kurallar eylem içermek zorunda değildir. Örneğin;
a.o : x.h
Burada x.h değiştiğinde a.o değişmiş kabul edilsin anlamı vardır.


Make Dosyalarında Makro Kullanımı
Uzun make dosyalarında aynı satırların defalarca yazılması zor olabilmektedir. Bunun için
makro kullanılabilir. Makro tanımlamanın genel biçimi şöyledir:
isim = değer
Örneğin;
CC = gcc
SOURCE = a.c b.c
OBJS = a.o b.o

Makrolar $(isim) ya da ${isim} biçiminde kullanılabilir. Örneğin;
#deneme
X : ${OBJS}
CC –o x ${OBJS}
a.o : a.c
CC –c a.c
b.o : b.c
CC –c b.c
${OBJS} : x.h
Make dosyaları içerisinde shell’in çevre değişkenleri kullanılabilir. Ayrıca bir makro komut
satırından da girilebilmektedir. Örneğin;
make “OBJS = a.o b.o”
make içerisinde hiç tanımlamadan kullanılabilecek önceden tanımlanmış çeşitli makrolar da
vardır. Bunların bazıları şunlardır:
CC = cc
LD = ld
AR = ar
SHELL = /bin/sh


CSD Heap Sistemi İçin make Dosyasının Oluşturulması
Heap sistemi için kullanılan C kaynak dosyaları şunlardır: heap.c, syserr.c, util.c. Bu dosyalar
başlık dosyalarına şöyle bir bağımlılık içerisindedir.


heap.c -> kassert.h + syserr.h + util.h + kparam.h + heap.h + general.h
syserr.c -> syserr.h + general.h
util.c -> util.h
#CSD heap system makefile
CC = gcc
OBJS = heap.o syserr.o util.o
EXE = heap
$(EXE): $(OBJS)
C ve Sistem Programcıları Derneği 148
CC –o $(EXE) $(OBJS)
heap.o: heap.c
CC –c heap.c
syserr.o: syserr.c
CC –c syserr.c
util.o: util.c
CC –c util.c
heap.o: kassert.h syserr.h util.h kparam.h heap.h general.h
syserr.o: syserr.h general.h
util.o: util.h general.h

SİTEMİZDE TOPLAM | 265 | KONU BULUNMAKTADIR.
ebilisimuzmani.tr.gg
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol