24 Nisan 2008 Perşembe

MakeFile...

Linux konsolundan make komutu verildiğinde içinde bulunulan dizin içerisinde makefile dosyası aranır ve bulunur ise çalıştırılır.
Compiler kaynak dosyaları alır ve hedef dosyaları üretir
Linker ise hedef dosyaları alıp çalıştırılabilir dosyaları üretir.
Temel makefile şöyledir;

hedef:bağımlılıklar
[tab]sistem komutları

g++ yi düşündüğümüzde -c parametresi "compile et ve birleştir ama link etme" derken -o parametresi "çıktı dosyasın bu olacak" demektir.

Örnek olarak üç dosyamız olduğunu düşünelim: merhaba.h merhaba.cc ve program.cc..
---merhaba.h---
void merhabaDeBize();
void hoscakalDeBize();

---merhaba.cc---
#include "merhaba.h"
#include iostream // bunu küçük büyük işareti içine al

using namespace std;

void merhabaDeBize(){
cout << "Merhaba" << style="color: rgb(255, 102, 102);">---ana.cc---
#include "merhaba.h"
#include iostream // bunu küçük büyük işareti içine al

int main(){
merhabaDeBize();
hoscakalDeBize();
return 0;
}

Eğer ana.cc dosyasını "g++ ana.cc" şeklinde derlemeye çalışırsanız olmayacaktır. Çünkü ana.cc içerisinde kullanılan merhabaDeBize ve hoscakalDeBize fonksiyonları merhaba.h header dosyasında tanımlanmış ve merhaba.cc dosyasında da ne yapacakları belirlenmiştir. Ancak ana.cc yi derlemeye kalkan compiler ın bundan haberi yoktur. Derleyebilmek için ise "g++ ana.cc merhaba.cc" dememiz a.out isimli çalıştırılabilir dosyayı üretmemizi sağlar. a.out dosyasını çalıştırabilmek için ise konsolda "./a.out" yazmalıyız.
Burada ki "./" a.out dosyasının içinde bulunulan klasörde olduğunu ifade eder.

Tekrar makefile a dönelim;
Temel olarak makefile içerisindeki hedefler karşılaşılma sıralarına göre çalıştırılırlar. Programımızı derleyecek makefile şöyle olmalıdır;

---makefile---
all: tumunuDerle
# "all" makefile dosyaları için temel hedeftir.

# (1) tumunuDerle ye gidecek

# (2) ana.o ve merhaba.o hedeflerine git
tumunuDerle: ana.o merhaba.o
g++ ana.o merhaba.o -o selamPrg
# (5) merhaba.o ve ana.o yu kullanarak
#slmPrg çalıştırılabilirini oluştur..

ana.o: ana.cc
g++ -c ana.cc
# (3) sadece ana.cc yi compile et


merhaba.o: merhaba.cc
g++ -c merhaba.cc
# (4) sadece merhaba.cc yi compile et


Hiç yorum yok:

Yorum Gönder