MAKE İLE PROJE YÖNETİMİ VE MAKEFILE YAZIMI

Benzer belgeler
ALGORİTMA VE PROGRAMLAMA I

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

SIMAN KULLANIM KILAVUZU

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Linux ve Windows Üzerinde C ve C++ Kullanımı

MPLAB IDE ve ISIS ile ASSEMBLY DİLİNDE UYGULAMA GELİŞTİRMEK

Linux'ta Kabuk ve Kabuk Programlama

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Bilgisayarda Programlama. Temel Kavramlar

C Konsol ve Komut Satırı

NACA PROFİL AİLE GEOMETRİSİ HESAP PROGRAMI KULLANMA KILAVUZU

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

1.1. Yazılım Geliştirme Süreci

C için tümleşik geliştirme ortamı (IDE) kurulumları

BİT in Temel Bileşenleri (Yazılım-1)

Kabuk Programlama (Bash)

NESNEYE YÖNELİK PROGRAMLAMA

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Dr. Fatih AY Tel: fatihay@fatihay.net

Aşağıda listelenen temel linux komutları bilgisayarınızın komut satırında çalıtırılacaktır.

LİNUX İŞLETİM SİSTEMİNİN KÖPRÜ MODUNDA ÇALIŞTIRILMASI VE GÜVENLİK DUVARI İŞLEMLERİ

NB Macro Kullanımı Hakkında Genel Bilgiler

C# nedir,.net Framework nedir?

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java Temel Özellikleri

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Analiz Raporu. Projenin amacının, konusunun, işlevinin ne olacağı, hangi yazılımlar kullanılacak gibi parametrelerin belirlenmesi.

HSancak Nesne Tabanlı Programlama I Ders Notları

4. Bölüm Programlamaya Giriş

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

Linux Assembly Programlamaya Giriş

C# ile e-posta Göndermek

Java Programlamaya Giriş

Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü ++ Bilişim Enstitüsü

ASP.NET ile Bir Web Sitesi Oluşturma

Üst Düzey Programlama

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bilgisayar Programlama. 1.Hafta

MPLAB IDE v7.60 PROGRAMI KULLANIMI

Bilgisayarın Yapıtaşları

ÖĞRENME FAALİYETİ 1 ÖĞRENME FAALİYETİ 1 1. FORMLAR

ENROUTEPLUS TA YAPILMASI GEREKENLER

Programlama Yazılımı ile Web Sitesi Oluşturma

PASCAL EDİTÖRÜ BÖLÜM Giriş. 2.2 Pascal Menüleri

Metin İşlemleri, Semboller

Üst Düzey Programlama

BİL-142 Bilgisayar Programlama II

Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir?

Bölüm1. İlk Bilgiler ISBN

JAL IN İNTERNET TEN İNDİRİLMESİ VE KURULMASI

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

PROGRAMLAMA DERSİ 1. İNTERNET

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Pardus 2013 te Metin Editörleri

Dr. Fatih AY Tel: fatihay@fatihay.net

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

İsmail YENİGÜL. EnderUNIX Çekirdek Takımı Üyesi.

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

Bigisayar Programlama

PHP I PHP I. E. Fatih Yetkin. 26 Eylül 2011

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ

İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

KODLAMAYA HAZIRLIK MODÜLÜ 1. YAZILI SINAV ÇALIŞMA SORULARI VE MODÜL ÖZETİ

Dinamik Kodlama. [X] [X] Yeni Fonksiyon

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

CHAPTER 3. ZAMANLANMIŞ GÖREVLER (Automated Tasks)

Öğr. Gör. Serkan AKSU 1

Veritabanı Uygulamaları Tasarımı

C Programlama Dili'ne Giriş

C++ C++ ın Temelleri (Basics of C++)

Lecture 11: Generics

Karma C/C + + Kodlama

ORKA da BANKA EKSTRESİ TRANSFERi v2 PROGRAMININ KULLANIM KLAVUZU

LyX. İlkay TÜRK ÇAKIR. SANAEM- TAEK HPFBO-Çukurova Üniversitesi

Giriş. Prof.Dr. Bahadır AKTUĞ JFM212 Python ile Mühendislik Uygulamaları. *Kaynakça bölümünde verilen kaynaklardan derlenmiştir.

Bilgisayar Programlama

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

Hukuk Parter ile SMS Yönetimi

1.PROGRAMLAMAYA GİRİŞ

ALGORİTMA VE PROGRAMLAMA I

Algoritma ve Programlamaya Giriş. Mustafa Kemal Üniversitesi Kırıkhan Meslek Yüksekokulu Bilgisayar Teknolojileri Bölümü

Veri Tabanı Yönetim Sistemleri Bölüm - 3

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 )

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C Dersi Bölüm 1. Bilgisayar Donanımı

Regular Expressions Version 0.1

Genel Programlama I Ders 3

Fstab Rehberi. Ceren Çalıcı. Nisan, 2012

Ekran 1: Ziraat Bankasından alınan Excel formatındaki ZIRAATBANKASI.XLS isimli dosya

GEÇİCİ HESAPLARI DÜZENLEME İŞLEMLERİ

Algoritma ve Programlamaya Giriş. Mustafa Kemal Üniversitesi Kırıkhan Meslek Yüksekokulu Bilgisayar Teknolojileri Bölümü

Temel Bilgisayar Programlama

Transkript:

MAKE İLE PROJE YÖNETİMİ VE MAKEFILE YAZIMI Gürhan Yerlikaya 14.02.06 [V:1] Özet : Bu makalede GNU make programının çalışması ve makefile yazım kuralları ele alınmıştır. make programının C programlarını derlemekte kullanılış biçimlerinden bahsedilmiştir. Açıklamalarda Unix/Linux sistemlerindeki make programı esas alınmıştır. 1. make PROGRAMI make, bir çok değişik çıktı üretebilen genel bir araçtır. Oluşturulan bir kural dosyası aracılığıyla, belirtilen sistem komutlarını ardarda çalıstırır. Bu vesile ile, çok karmaşık işleri, komut satırından verilen basit bir make komutu ile kolayca yapabilirsiniz. Temel olarak make programı kural dosyası üzerinde bazı kontroller yaparak işlemektedir. make, kural dosyası içerisinde belirtilen hedef dosya ile kaynak dosyanın zaman damgası (time stamp) ilişkisine göre hareket eder ve bir takım komutların çalıştırılıp çalıştırılmayacağına karar verir. Başka bir deyişle, her bir kaynak dosya bir hedef dosyaya ihtiyaç duyar ve kaynak dosya, hedef dosyadan daha yeniyse kural dosyasında belirtilen komutlar çalıştırılır. Bu komutlar hedef dosyanın yenilenmesini sağlar. Aslen make daha genel bir araç olarak tasarlanmıştır. make programı ile birlikte kullanılan kural dosyası ile C/C++ programlarını derlemenin yanısıra, HTML kodlarındaki değişikliklerin takibi, NIS (Network Information Service Ağ Bilgi Hizmeti) de kullanıcı bilgilerini işleme, TEX / LATEX dökümanların derlenmesi, program kurulumu gibi işler de yapılabilmektedir. Günümüzde açık kaynak kodlu yazılımlar, kaynak dosyalarının yanında derleme işlemi için kullanılacak makefile dosyası ile birlikte gelmektedir. Herhangi bir Linux dağıtımını ya da açık kaynak kodlu bir yazılımı make programı aracılığla kendiniz derleyebilirsiniz. İnternet aracılığı ile kolayca elde edebileceğiniz bazı betik (script) dosyaları ve make programı ile birlikte kendi Linux dağıtımınızı bile oluşturabilmeniz mümkündür. CSD İşletim Sistemi geliştirme projesinde de derleme işleri gcc (GNU Compiler Collection) derleyicisi ve make yardımcı programı aracılığı ile yapılmaktadır. 1

2. make PROGRAMININ KULLANIMI Yorumlayıcı mantığıyla çalışan programlama dillerinin tersine, derleme mantığıyla çalışan C ya da C++ gibi programlama dillerinde kaynak dosyalar kabaca iki aşamadan geçtikten sonra çalıştırılabilir dosya haline getirilirler. İşletim sistemi gelşitirme projesi gibi taşınabilirliğin çok önemli olduğu projelerde IDE (Integrated Development Environment bütünleşik geliştirme ortamı) derleyicileri kullanma imkanı olmadığından, derleme işlemi konsol ekrandan çalışan derleyiciler ile mümkün olabilmektedir. Böyle projelerde dosya sayısı fazla olduğundan derleme süreleri çok uzun ve konsol ekrandan yazımları de zor olmaktadır. Bu nedenle make gibi yardımcı programlara gerek duyulmuştur. Eğer C programcısıysanız ve birden fazla kaynak dosyadan oluşan bir projeniz varsa bu dosyaları elle derlemek ve bağlamak çok zaman alacaktır. Yaptığınız her değişiklikte gcc derleyicisi aracılığıyla, elle bir çok komut ve dosya adı girmeniz gerekmektedir. İşte make programı ve kural dosyası ile bu işlemleri otomatik olarak yalnızca konsol ekranına : # make komutunu yazarak yapabilirsiniz. Kural dosyası içerisindeki etiket ya da etiketler altındaki tanımlamalar ile make programı bizim için gerekli derleme ve bağlama işlemlerini yapar. Eğer siz kaynak dosyalar içerisinde bir değişiklik yaptıysanız make programı ilk önce değişiklik yaptığınız dosyayı derler, sonra da diğer obje dosyalar ile bağlayarak çalıştırılabilir dosyayı oluşturur. Programcının sorumlu olduğu, kural dosyası içerisindeki bağımlılıklardır. make, ön tanımlı olarak adı makefile ya da Makefile olan bir dosyayı arar. Kısaca make birden çok kaynak dosyadan oluşan programlarda sadece gerekli derleme işlerinin yapılmasını sağlayarak derleme sürecini hızlandırmaktadır. 3. DERLEYİCİLERİN ÇALIŞMA MANTIĞI VE Makefile DOSYASI Bir program, birden fazla kaynak dosyadan oluşabilir. Bu kaynak dosyaların proje dosyasına eklenmesi ile, bir dosyadan include edilmesi, tamamen farklı anlamlara gelen kavramlardır. Projeye eklenmiş dosyalara modül denir. Ve modüller bağımsız olarak derlenmektedir. Sonra hep birlikte bağlanırlar. Büyük projeler tek modül halinde yazılamazlar. Bu nedenle birden fazla modül ile çalışılmaktadır. Basitçe bir.c dosyasından çalıştırılabilir dosya oluşturulması işlemi aşağıdaki gibi olmaktadır : 2

Build ya da make işlemi, yalnızca değişen dosyaların yeniden derlenmesi ve hep birlikte bağlanması anlamına gelir. IDE li derleyicilerdeki Build All ya da Make All seçenekleri kayıtsız şartsız, tüm dosyaların yeniden derlenmesi anlamına gelir. Modern derleyicilerin bizim için yaptığı, her proje için bir makefile oluşturmaktır. Böylelikle biz her yeni dosya eklediğimizde makefile ın içini açıp yeni tanımlamalar girmek zorunda kalmayız. Tabi IDE li bir derleyici kullanamayacağımız durumlar da vardır. İşletim sistemi yazımı buna güzel bir örnektir elbette. Aşağıda basit bir C projesinin makefile ile birlikte nasıl çalıştırılabilir dosya haline getirildiği gösterilmiştir : 3

Makefile dosyası içerisine yazacağımız tanımlamalar sayesinde make programı hangi dosyaların derlenip bağlanacağına karar vermektedir. IDE sisteminin olmadığı durumlarda, değişen dosyaların tespit edilerek, derlenmesi ve bağlanması, make programı tarafından yapılabilmektedir. Programcı bir makefile dosyası hazırlar ve sonra make programını çalıştırır. IDE li sistemlerde menülerdeki compile seçeneği, o anda editörde bulunan kaynak dosyayı derlemektedir. Build ya da make seçenekleri, aynı anlama gelir ve yalnızca değişen dosyalar yeniden derlenir. Sonra, bağlama işlemi yapılarak çalıştırılabilir dosya oluşturulur. Build All gibi bir seçenek projedeki tüm kaynak dosyaların koşulsuz derleneceği ve bağlanarak çalıştırılabilir dosya oluşturulacağı anlamına gelmektedir. Menülerdeki run gibi komutlar Build ya da make işlemi yaptıktan sora üretilen çalıştırılabilir dosyayı çalıştırmaktadır. Makefile, make programının kullanacağı kuralları içeren text dosyasıdır. Makefile dosyalarının oluşturulma biçimi ve genel sentaksı Unix\Linux, DOS\Windows sistemlerinde birbirine benzemektedir. Fakat bazı farklar bulunmaktadır. Programcı hangi sistemde ve hangi derleyici ailesiyle çalışıyorsa onun makefile oluşturma sentaksını dikkate almalıdır. 4

4. BASİT BİR Makefile DOSYASI OLUŞTURMAK Makefile dosyaları kural (rule) denilen cümleciklerden oluşturulur. Bir kuralın genel biçimi aşağıdaki gibidir : Hedef : Bağımlılıklar <tab>komut...... Hedef (target) etiketi, make programı tarafından yapılacak işlerin başladığı satırı belirtir. Eğer bağımlılıklar (dependencies) hedeften daha yeni ise (burada dosyanın zaman damgası özelliği karşılaştırılır) komutların (command) bulunduğu satırdaki işler yapılır. Her komut bir tab içeriden başlamalıdır. Hedef ile bağımlılıklar : karakteri ile birbirinden ayrılır. Birden fazla hedefiniz olabilir. Hedef1 Hedef2 : Bağımlılık1 Bağımlılık2 <tab>komut...... Burada Bağımlılık2 dosyasının zaman damgası Bağımlılık1 dosyasının zaman damgasında daha yeniyse belirtilen komut çalıştırılır. Programınızın daha farklı olarak derlenmesini istediğinizde, makefile dosyanız içerisinde oluşturduğunuz diğer hedef etiketlerini make programına parametre olarak verebilirsiniz. # make clean Burada make programı makefile dosyası içerisindeki clean : ile başlayan satırı arayacak, ve oradaki işleri yapacaktır. Küçük bir C projesinin makefile dosyası aşağıda verilmiştir : # # Makefile Test Project # Copyright (c) 2006 by Gürhan Yerlikaya <han@csystem.org> # proje : main.o io.o data.o /usr/lib/libc.a cc -o proje main.o io.o data.o /usr/lib/libc.a main.o : data.h io.h main.c cc -c main.c io.o : io.h io.c cc -c io.c 5

data.o : data.h data.c cc -c data.c clean : /usr/lib/rm *.o make programı # ile başlayan satırları dikkate almaz. Buraya açıklama yazabiliriz. C99 daki // ile benzerdir. Aynı şekilde, sadece tek satır için kullanılır. Eğer komutlar çok uzunsa / ile alt satırdan devam edebiliriz. Başında @ karakteri bulunmadığı sürece komutlar da standart çıktı birimine gönderilir. Eğer standart çıktı birimine istediğimiz yerlerde bazı uyarı mesajları göndermek istiyorsak echo komutunu kullanabiliriz. Yukarıdaki örneği echo komutunu kullanarak yazarsak : proje : main.o io.o data.o /usr/lib/libc.a cc -o proje main.o io.o data.o /usr/lib/libc.a @echo == Derleme islemi basari ile tamamlandi!.. == main.o : data.h io.h main.c cc -c main.c @echo main.o dosyasi basari ile olusturulmustur. io.o : io.h io.c cc -c io.c @echo main.o dosyasi basari ile olusturulmustur. data.o : data.h data.c cc -c data.c @echo main.o dosyasi basari ile olusturulmustur. clean : /usr/lib/rm *.o @echo Obje dosyalar basari ile temizlenmistir. şeklinde olur. Böylelikle yaptığımız hataları daha rahat takip edebiliriz. Eğer @ karakterini kullanmasaydık, örneğin : #make clean komutu verildiğinde ekranda : Obje dosyalar basari ile temizlenmistir. yazısı yerine : echo Obje dosyalar basari ile temizlenmistir. 6

yazısını görecektik. Yapacağımız tanımlamalarda, en son bakılmasını istediğimiz bağımlılıkları en başa yazmalıyız. Çünkü make programı işleri sondan başa doğru yapmaktadır. Bu nedenle bir hedef, kendisine bağlı hedeflerin tümünden daha sonra tanımlanmış olmalıdır. Yukarıdaki Makefile içerisindeki bağımlılıkları grafikle ifade edersek : data.c kaynak dosyasının içerisinde bir değişiklik yaptıysak, data.o obje dosyasının yeniden oluşturulması için ona bağlı dosyalar yeniden derlenir. Eğer data.h dosyasında bir değişiklik yaptıysak data.o ve main.o obje dosyalarına bağlı dosyalar yeniden derlenir. 5. MAKROLAR LA ÇALIŞMAK Makefile dosyalarında bazı uzun yazımları engellemek için makrolar kullanılmaktadır. Makro bir çeşit C deki sembolik sabit gibidir. Makroların temel söz dizimi şöyledir : isim : değer\ler Kullanımı ise : ${MAKRO_ISMI} ya da 7

$(MAKRO_ISMI) şeklindedir. Böylece yazımda gereksiz yinelemeleri engellemiş oluruz. Bir makro birden fazla kez kullanılırsa en son kullanıldığı yerdeki hali geçerli olacaktır. Bir önceki başlıkta verdiğimiz örnekte makro kullansaydık dosyamız aşağıdaki gibi olacaktı: LIBCDIR = /usr/lib/ COMPILER = cc OBJS = main.o io.o data.o EXE = proje ${EXE} : ${OBJS} ${LIBCDIR}libc.a ${COMPILER} -o ${EXE} ${OBJS} ${LIBCDIR}libc.a @echo == Derleme islemi basari ile tamamlandi!.. == main.o : main.c data.h io.h ${COMPILER} -c main.c @echo main.o dosyasi basari ile olusturulmustur. io.o : io.h io.c ${COMPILER} -c io.c @echo io.o dosyasi basari ile olusturulmustur. data.o : data.h data.c ${COMPILER} -c data.c @echo data.o dosyasi basari ile olusturulmustur. clean : ${LIBCDIR}rm *.o @echo Obje dosyalar basari ile temizlenmistir. 5.1 Yerleşik Makrolar make programı bir kaç tane özel yerleşik makroyu kendinden sunmaktadır. Bu makrolar sistemden sisteme değişebilmektedir. Biz bu makalede Unix/Linux sistemlerinde olanları inceleyeceğiz. Bu yerleşik makroların tek karakterli olanlarını kullanırken, diğerlerinden farklı olarak, parantez kullanmamıza gerek yoktur. Örneğin yerleşik makrolardan biri olan @ makrosunu kulanırken : $(@) yerine $@ 8

şeklinde kullanabiliriz. Fakat bizim oluşturduğumuz makro adları için tek karakterden çok betimleyici isimler kullanmamız salık verilmiştir. Böylelikle yazdığımız makefile dosyaları daha okunabilir olacaktır. Bu tip makroların içerisindeki değeri değiştirmek mümkün değildir. $%, $?, $*, $< makroları diğer yerleşik makrolardır. Ön tanımlı olan değeri değiştirilebilen makrolar da vardır. VPATH, CC, LD ve SHELL makroları bu tür makrolardandır. CC makrosu sistemdeki öntanımlı derleyiciyle, LD öntanımlı bağlayıcıla ilişkilendirilmiştir. SHELL, bulunulan sistemdeki öntanımlı kabuk program ile ilişkilendirilmiştir. VPATH makrosu sistemdeki PATH değişkenine birden fazla değer girmemizi sağlamaktadır. VPATH makrosu dizin ağacı çok karışık olan, işletim sistemi geliştirme projesi gibi projelerde çok kullanışlıdır. Linux ve CSD işletim sistemlerinin makefile dosyalarında VPATH makrosu çok büyük fayda sağlamaktadır. Yerleşik makroların ayrıntılarını GNU Make Utility kılavuzundan inceleyebilirsiniz. 6. YARARLI MAKE ARGÜMANLARI - d : Hata ayıklama kipinde kullanmamızı sağlar. - f : Daha önce de söylediğimiz gibi make programı parametresiz olarak çalıştırılırsa makefile dosyası olarak sırasıyla Makefile ve makefile isimli dosyaları arar. Kendi belirlediğimiz bir dosyanın işleme +sokulabilmesi için f seçeneği kullanılabilir. Kullanımı : # make f dosya_ismi şeklindedir. Standart makefile dosyası adınının kullanılmadığı durumlarda genellikle dosya uzantısı olarak.mk kullanmak gelenek haline gelmiştir. - p : Yapılan her işi adım adım standart çıktı birimine yönlendirmek için kullanılır. - k : make programı yürütülürken bir hata oluştuğunda, oluşan hatanın bulunduğu yerdeki işlemi devre dışı bırakarak diğer işlemleri yapmaya devam eder. - q : Komutları çalıştırmadan hedeflerin güncelliğini sorgulamak için kullanılır. make programı hedeflerin tümü güncelse sıfır değerine geri döner. Eğer biri güncel değilse sıfır dışı bir değer döndürür. - t : Bu seçenek Unix\Linux sistemlerindeki touch komutuyla alakalıdır. make programını touch kipinde çalıştırır. - i : make programı çalışırken oluşan bir hatadan dolayı durmamasını sağlar. make hataları görmezden gelerek sonuna kadar devam eder. 9

- r : make programının önceden tanımlanmış içsel kurallarını ve makrolarını devre dışı bırakarak yalnızca kullanıcı tarafından tanımlanmış kuralları dikkate alır. 7. YARDIMCI make PROGRAMLARI 7.1 makedepend : İşletim sistemi yazımı gibi büyük ölçekli projelerde dosyalar arasındaki bağımlılığın bulunması çok zaman alan ve zahmetli bir iştir. makedepend yardımcı programı bizim için kaynak dosyalarımız arasındaki bağımlılık listesini çıkartır. 7.2 mkmf : Proje içerisindeki dosyaların bağımlılıklarını araştırıp daha önceden belirlenmiş bir şablona göre bizim için bir makefile oluşturur. mkmf adı, make makefile ın kısaltmasıdır. 8. ALTERNATİF make PROGRAMLARI Bir çok işi çok kısa zamanda, tek bir komut yardımıyla yapmamızı sağlasa da make bazı yönlerden hala çok yetersizdir. Örneğin make içerisinde if benzeri koşul değimleri bulunmamaktadır. Bu nedenle standart make uygulamasına alternatif olarak bazı make programları geliştirilmiştir. Aşağıda bir kaç tanesi incelenmiştir. 8.1 nmake : nmake, AT&T nin geliştirdiği make için en gelişmiş alternatif programlardan birisidir. Büyük ölçekli C projeleri için çok gelişmiş özellikler sunmaktadır. Microsoft un da nmake isimli bir make sürümü bulunmaktadır. Fakat, teknik özellikler bakımından bu make programı AT&T nin nmake ine göre çok zayıf kalmaktadır. 8.2 GNU make : GNU nun geliştirdiği bu make sürümü sayesinde if gibi koşul değimlerini makefile dosyasında kullanabiliyoruz. Ayrıca GNU make gelişmiş makro özellikleri, ek matin işleme özellikleri ve := operatörünü de kullanabilmekteyiz. 8.3 imake : imake, make programı içerisinde daha rahat çalışabilememiz için bize bir ön işlemci mekanizması sunmaktadır. Oluşturduğu makefile dosyalarını daha önce belirleniş bir şablona göre oluşturmaktadır. imake büyük ölçekli projeler için kullanışlı bir araçtır. Kaynaklar 1. Managing projects with Make Andrew Oran & Steve Talbott, O Reilly, 1993 2. GNU Make Utility Manual - http://www.gnu.org/software/make/manual/html_chapter/make.html 10