Make
Make dosyaları bir formdan diğerini çevirme işlemini otomatikleştiren bir araçtır. Bu işlemi, çevrilecek programların ihtiyaç duyacağı diğer programları kontrol ettikten sonra gerekli programları çalıştırarak çevirme işlemini gerçekleştirir. Çevrilen programı çalıştırmak için ihtiyaç duyulan diğer programlara bağımlılıklar denir. Unix/Linux tabanlı işletim sistemlerinde, kaynak kodu (source code) nesne koduna (object code) derlerken ve nesne kodlarını çalıştırılabilir (executable) ve kütüphane (library) dosyalarına bağlarken (linking) sıkılıkla kullanılır. Bağımlılık grafiğini çıkarmak için "Makefile" ismi verilen bir dosya kullanır ve shell'e (kabuk) geçirilmek üzere kullanılan betikleri (script) oluşturur.
Otomatik yazılım inşasında karşılaşılan bir problem inşa işleminin farklı platformlarda uygulanmasıdır. Örneğin, bir platformda kullanılan derleyici başka platformdaki bir derleyiciyle aynı parametreleri kullanmıyor olabilir. Bu problemi yalnız Make kullanarak çözmek pratik değildir. Bu problemi çözmek için genellikle CMake ve Autoconf gibi araçlar kullanılarak platforma özel inşa komutları oluşturulur. Oluşturulan komutlar daha sonra Make tarafından işlenir.
Makefile Yapısı
Makefile bir grup dosyaya bağlı olarak, bir dosyayı ya da kural adını tanımlayan metin satırlarından oluşur. Çıktı dosyaları bağlı oldukları kaynak dosyalarına ve kaynak dosyalarda içinden dahil edildikleri dosyalara göre işaretlenirler. Her bir bağımlılık listelendikten sonra, tab ile boşluk bırakılmış satır dizileri girdi dosyalarının çıktı dosyalarına nasıl dönüştürüleceğini tanımlar (eğer girdi dosyaları çıktılardan daha önce değişikliğe uğramış ise). Bu tip tanımlamalara "build scripts" adı verilir ve hedef dosyayı oluşturması için shell' e geçirilir. Basit bir Makefile yapısı aşağıdaki gibidir.
Makefile çeşitli değişken tanımları içerebildiği gibi diğer Makefile' lardan alıntıda yapabilir. Makefile içerisindeki değişkenler komut satırından geçirilecek olan değerlerle değiştirilebilir. Bu kullanıcıya build script' ler için farklı davranışlar tanımlayabilmesini sağlar ve programları diğerleri arasından nasıl çağırabileceğini belirler. Örneğin, Makefile lardaki "CC" değişkeni sıklıkla C derleyicisine referans için kullanılır ve kullanıcı farklı bir derleyiciyi kullanmak maksadıyla tanımlayabilir.