Programlama

Make

Make nedir?

Make’i Stuart Feldman Bell Labs’ta 1976’da yazdı. Amaç her şeyi yeniden kurmamaktı. Makefile hedef, bağımlılık ve komut tutar. Hedef alınan dosyanın adıdır. Bağımlılık o dosyadan önce hazır olması gereken dosyadır. Komut satırının başı boşluk değil, sekme olmalıdır. Boşluk yazılırsa Make durur. Linux’ta yaygın kullanılan tür GNU Make’tir. Eski Make’in üstüne kendi eklerini koyar. Komutun kendisi başka programdır: derleyici, betik veya kopya.

Make ne için kullanılır?

Make büyük projede yalnız değişen parçayı yeniden kurmak içindir. Küçük yinelenen komutu da bir hedefe bağlayabilir.

  • C programında yalnız değişen dosyayı yeniden kurmak
  • Testi bir hedef adıyla açmak
  • Temizlik komutunu ayrı hedef yapmak
  • Birkaç adımı bir ad altında tutmak

Make ile ne yapılabilir?

Make ile hedefin eski olup olmadığına bakarsın. Dosya değişmediyse komutu yeniden çalıştırmaz. Derleyici değildir. Derleyiciyi satırın içinde çağırırsın. Sekme veya yol yanlışsa kurma sessiz veya yarım kalır. Sonucu Makefile’dan okumak gerekir.

Make öğrenmek zor mu?

Bir hedef yazmak kolaydır. Zorluk sekme ve bağımlılıktadır. Boşluk sekme gibi görünür, ama Make onu kabul etmez. Bağımlılığı yazmamak eski dosyayı yeni sayar ve komutu atlar. Aynı hedef iki yerdeyse son kural çalışır. Saat yanlışsa Make dosyayı taze veya eski sanır.

Avantajları ve sınırları

Avantaj: değişmeyen parça yeniden kurulmaz, kural bir dosyada durur, araç eski ve yaygındır. Sınır: sekme hatası sık olur ve büyük Makefile zor okunur. Make, Cargo ve npm değildir. Vakti gelince senin yazdığın komutu çağırır.

Temel kavramlar

Hedef alınacak addır. Bağımlılık ondan önce hazır olan dosyadır. Komut ise o adımın kendisidir.

  • Hedef satırın solunda durur
  • Komut sekme ile başlar
  • Değişmeyen dosya yeniden kurulmaz
  • make adı verilen hedefi çalıştırır

Kısa örnek

Bu, bir programı iki nesne dosyasından kuran kısa kuraldır. Komut satırındaki boşluk sekme olmalıdır.

app: main.o util.o
	gcc -o app main.o util.o

Sık sorulan sorular

  • Make programlama dili mi? Hayır. Dosya eskiyse senin komutunu çağırır.
  • Make ve Cargo aynı mı? Hayır. Cargo Rust içindir. Make senin yazdığın komutu hedefe bağlar.
  • Komut boşlukla başlayabilir mi? Hayır. Geleneksel Make sekme ister. Boşluk satırını komut saymaz.