written by alivardar | 1677 Views | Rating: (0 rates)
M.Ali VARDAR 2006 Make Kullanımı nasıldır?
Make Kullanımı
GCC ile uygulama derlerken, kullanılan kitaplıkların sayısı artabilmektedir. Bu sayı
ile orantılı ilgili kitaplıklara ait dizinler değişebilir. Aynı zamanda uygulamaya dahil
olan dosya sayısı artabilir. Bu değerleri parametre olarak vererek her seferinde GCC
ile uygulama derlemek uygulama geliştirme süreci çekilmez bir hale getirecektir.
Make ile ilgi örnekler c diline göre verilmiştir. Make konsolda çalışan tüm dilleri
desteklemektedir.
Make genel olarak projenin derlenmesi, kurulması, sistemden kaldırılması,
derlenmiş olan dosyaları silmesi gibi sıklıkla yapılan işlemleri baitleştirmeye yarar.
Konsolda Make komutuna basit bir parametre vererek bu işlemler veya özel
komutlar gerçekleştirilebilir. En basit kullanımı konsolda make yazılması ile
gerçekleşir. Make komutunu verilebilecek parametreler aşağıdaki şekildedir. En sık
kullanılan yöntemler ise
make
make clean
make install
biçimindedir. Bu parametreler makefile dosyası içinde bulunan ilgili alanları
çalıştırmaktadır.
f
parametresi ile özel bir isme sahip makefile dosyası işletilebilir.
n
çalıştırılan komutları gösterir.
s
çalıştırılan komutları göstermez.
j
eş zamanlı çalıştırılacak komut miktarı tanımlanır. Örnek j4
Proje dizini içinde make komutu verilmesi durumunda, make öncelikle bulunulan
dizin içinde, GNUmakefile, Makefile veya makefile dosyalarından birini arar. Bu
dosya hemen hemen her projede Makefile dır. Temel hali ile basit bir Makefile
aşağıdaki şekildedir.
Makefile dosyasının komutları iskelet olarak aşağıdaki şekilde komutları işler.
hedef: gereklilikler
[tab] komutlar
Bu örneğe göre bir basit derleme komutu aşağıdaki şekilde tanımlanabilir.
all: uygulama_adi
uygulama_adi: derleme_komutları
install:
M.Ali VARDAR 2006 Make Kullanımı nasıldır?
cp uygulama_adi /usr/bin;cp files /usr/share/uygulama_adi
clean:
rm rf
*
Makefile dosyalarında yapılan işlemler ile ilgili açıklama vermek amacıyla # işareti
kullanılır. Bu işaretten sonra gelen alan açıklam kabul edilir ve işletilmez.
# FreeBSD için kullanılacak değişkenler
LIBS=/usr/local/lib
biçiminde kullanılabilir.
Örnek Makefile içindeki all, install, clean alanlarının altındaki satırların bir sonraki
komuta kadar, tab ile boşluk verilmesi gerekmektedir. Tab yerine boşluk
kullanamazsınız. Kullanılması durumunda make işlemi hata vererek duracaktır. Tab
bazı editörlerde dört karakter boşluk bırakmaktadır. Bu durumda iki defa basılması
gerekecektir. Vi kullanıcıları bu sorunu yaşamayacaktır. Aynı zamanda uzun bir
satırın bölünmesi istenirse "\" karakteri verildikten sonra alt satırdan devam
edilebilir. Makefile yazılırken uygulama içinde gerekli değişklikleri yaptıktan sonra
konsolda make veya make all komutu derlemeyi başlatacaktır. install ve clean
tanımları en sık kullanılan tanımlardır. Bunların yerine kur veya kaldır isimleri veya
size kalmış başka adlar verilebileceği gibi farklı isimlerde ilave komutlar eklenebilir.
Makefile içinde tekrar eden değerler, değişken tanımlanarak kullanılabilir. Örnek
olarak sıklıkla kullanılan değişkenler olarak derleyici adı ve kütüphane yolları
verilebilir.
CC=gcc w
mcpu=
i686 O1
LIBS=L/
usr/lib/mysql I/
usr/include/mysql lmenu
lform
lmysqlclient
lcrypt
Tanımlanan değişkenler Makefile içinde $(degisken_adi) biçiminde kullanılabilir.
Örnek olarak tanımlanan değişkenler;
$(CC)
$(LIBS)
Daha önceden tanımlanmış olan ve kullanıma hazır olan değişkenler mevcuttur.
Bunları siz önceden tanımlamasanız dahi varsayılan değerleri ile kullanılabilir. Bu
değişkenler
CC C programlarını derlemek için tanımlanan derleyici varsayılan değer: cc
RM Programları silmek için kulanılacak program varsayılan değer: rm -f
$@ Kullanıldığı andaki hedefin adını belirtir. Kısaca çıktı dosyasının adıdır.
$< Kullanıldığı andaki girdi dosyasını belirtir.
Bu değişkenler tekrar tanımlanarak farklı bir değer ile kullanılabilir.
Bütün bu örneklerden sonra olabilecek basit haliyle kullanılan bir make dosyasını
inceleyelim ve bunu daha komplike hale getirmeye çalışalım. Konsolda editörümüz
ile aşağıdaki komutları Makefile adı ile kayıt edelim. Konsolda make komutuna
parametre verilmez ise make all komutunu çalıştıracaktır. Önemli olan : ile biten her
M.Ali VARDAR 2006 Make Kullanımı nasıldır?
yazı birer komut olarak make kullanılır. Bu komut ile birlikte : dan sonra gelen
komutlar işletilir.
#Kullanıma hazır Makefile dosyası
CC=gcc
all: uygulama_adi
uygulama_adi: uygulamam.c
$(CC) O3
w
Wall
I/
usr/include I/
usr/local/include\
o
uygulamam uygulamam.c
strip uygulamam
#Bu alanda bulunan o
uygulamam uygulamam.c kısmında bulunan
#“uygulamam” $@ kullanılarak uygulama_adi biçiminde de kullanılabilir.
#Bütün satır di er bir yolla bu ekilde ğ ş yazılabilirdi.
#$(CC) O3
w
Wall
I/
usr/include I/
usr/local/include $< o
$@
#make clean sonrası çalıştırılacak olan komut seti.
clean:
rm rf
uygulamam
rm rf
*.o
#make install sonrası çalıştırılacak olan komut seti
install:
mkdir /etc/uygulamam
cp ./uygulamam.conf /etc/uygulamam/uygulamam.conf
#aynı zamanda uygulamanın sistemden kaldırılması için yazılmış hazır
#komut seti
uninstall:
rm rf
/etc/uygulamam
rm rf
/usr/local/bin/uygulamam
Makefile içinde terkrar eden işlemlerin özellikle de dağıtımdan veya işletim
sisteminden farklı olması muhtemel olan alanların değişkenler içinde Makefile
dosyasının başında tanımlanması çok önemli bir noktadır. Yazılan uygulamanın
basit değişiklikler ile istenen dağıtımda veya farklı bir işletim sisteminde (örnek BSD
türevleri gibi) hatasız derlenmesini sağlayacaktır. Örnek olarak kurulmak istenen
dizin bu alanda belirlenebilir. Farklı bir derleyici kullanılabilir. En önemlisi ise
M.Ali VARDAR 2006 Make Kullanımı nasıldır?
gerekli kitaplıklara ait dizinler değişken olarak tanımlanabilir. Örnek olarak gerekli
kitaplık dizinlerini dosyanın başında LIB değişkeni içinde tanımlarsak;
LIBS=L/
usr/lib/mysql I/
usr/include/mysql lmenu
lform
lmysqlclient
lcrypt
Bu değişken
$(CC) O3
w
Wall
$(LIBS) o
uygulamam uygulamam.c
biçiminde kullanılabilir. Bu değişiklik bizlere birden fazla derleme anında hepsini
düzenleme derdinden kurtarır ve Makefile kullanımında işletim sisteminin şartlarına
göre esneklik kazandırır. Projeye başlarken olası değişiklikler göz önüne alınmalıdır.
Birden fazla işletim sistemi hedefleniyorsa mutlaka olası değişiklikler değişkenler
içinde tanımlanmalıdır.
Makefile dosyaları içine dışarıdan dosyalar dahil edilebilir. bu amaçla include
komutu kullanılır. Aynı uazntıya sahip birden fazla dosya *.uzanti biçiminde
tanımlanarak kullanılabilir. Aynı zamanda tek include parametresi ile birden fazla
farklı tip dosya Makefile içine eklenebilir. Örnek olarak;
include degiskenler.mk libler.mk base.mk
gibi kullanılabilir. bunun yanında include sırasında değişkenlerde kullanılabilir.
eklenti=libler.mk
include degiskenler.mk $(eklenti)
M.Ali VARDAR
ali@linuxprogramlama.com
Bu yazının son şeklini www.linuxprogramlama.com adresinden temin
edebilirsiniz.
Yasal Açıklama:
Bu belgenin, [GCC Kullanımı] 1.0 sürümünün telif hakkı © 2005 M. Ali Vardar'a aittir.
Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür
Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak
kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını
http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.
BU BELGE "ÜCRETSİZ" OLARAK RUHSATLANDIĞI İÇİN, İÇERDİĞİ BİLGİLER İÇİN
İLGİLİ KANUNLARIN İZİN VERDİĞİ ÖLÇÜDE HERHANGİ BİR GARANTİ
VERİLMEMEKTEDİR. AKSİ YAZILI OLARAK BELİRTİLMEDİĞİ MÜDDETÇE TELİF
HAKKI SAHİPLERİ VE/VEYA BAŞKA ŞAHISLAR BELGEYİ "OLDUĞU GİBİ", AŞİKAR
VEYA ZIMNEN, SATILABİLİRLİĞİ VEYA HERHANGİ BİR AMACA UYGUNLUĞU DA
DAHİL OLMAK ÜZERE HİÇBİR GARANTİ VERMEKSİZİN DAĞITMAKTADIRLAR.
BİLGİNİN KALİTESİ İLE İLGİLİ TÜM SORUNLAR SİZE AİTTİR. HERHANGİ BİR
HATALI BİLGİDEN DOLAYI DOĞABİLECEK OLAN BÜTÜN SERVİS, TAMİR VEYA
DÜZELTME MASRAFLARI SİZE AİTTİR. İLGİLİ KANUNUN İCBAR ETTİĞİ
DURUMLAR VEYA YAZILI ANLAŞMA HARİCİNDE HERHANGİ BİR ŞEKİLDE TELİF
M.Ali VARDAR 2006 Make Kullanımı nasıldır?
HAKKI SAHİBİ VEYA YUKARIDA İZİN VERİLDİĞİ ŞEKİLDE BELGEYİ DEĞİŞTİREN
VEYA YENİDEN DAĞITAN HERHANGİ BİR KİŞİ, BİLGİNİN KULLANIMI VEYA
KULLANILAMAMASI (VEYA VERİ KAYBI OLUŞMASI, VERİNİN YANLIŞ HALE
GELMESİ, SİZİN VEYA ÜÇÜNCÜ ŞAHISLARIN ZARARA UĞRAMASI VEYA
BİLGİLERİN BAŞKA BİLGİLERLE UYUMSUZ OLMASI) YÜZÜNDEN OLUŞAN
GENEL, ÖZEL, DOĞRUDAN YA DA DOLAYLI HERHANGİ BİR ZARARDAN, BÖYLE
BİR TAZMİNAT TALEBİ TELİF HAKKI SAHİBİ VEYA İLGİLİ KİŞİYE BİLDİRİLMİŞ
OLSA DAHİ, SORUMLU DEĞİLDİR.
Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen
herhangi bir terim, bir ticari isim ya da kuruma itibar kazandırma olarak
algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği
anlamında görülmemelidir.

Downloads




