man/dev_and_programming
man · Geliştirme & Programlama

$ make

Bölüm 1 · Geliştirme & Programlama

program gruplarını yönetmek için kullanılan GNU make aracı

Söz Dizimi

       make  [ -f makefile ] [ seçenekler ] ... [ hedefler ] ...

Uyarı

Bu kılavuz sayfası (man page), GNU make belgelendirmesinin bir özetidir. GNU projesi nroff kullanmadığı için bu sayfa yalnızca ara sıra güncellenmektedir. Eksiksiz ve güncel belgelendirme için, make.texi Texinfo kaynak dosyasından üretilen make.info Info dosyasına başvurun.

Açıklama

make aracının amacı, büyük bir programın hangi parçalarının yeniden derlenmesi gerektiğini otomatik olarak belirlemek ve bunları yeniden derlemek için gereken komutları çalıştırmaktır. Bu kılavuz, Richard Stallman ve Roland McGrath tarafından yazılan ve şu anda Paul Smith tarafından sürdürülen make aracının GNU uygulamasını açıklamaktadır. Örneklerimiz en yaygın olan C programlarını göstermektedir, ancak derleyicisi bir kabuk komutuyla çalıştırılabilen herhangi bir programlama diliyle de make aracını kullanabilirsiniz. Aslında make, programlarla sınırlı değildir. Bazı dosyaların, diğer dosyalar her değiştiğinde otomatik olarak güncellenmesi gereken herhangi bir görevi tanımlamak için de bu aracı kullanabilirsiniz.

make kullanmaya hazırlanmak için, programınızdaki dosyalar arasındaki ilişkileri açıklayan ve her bir dosyanın güncellenmesi için gereken komutları belirten "makefile" adı verilen bir dosya yazmalısınız. Bir programda, genellikle yürütülebilir dosya, kaynak dosyaların derlenmesiyle oluşturulan nesne (object) dosyalarından güncellenir.

Uygun bir makefile mevcut olduğunda, bazı kaynak dosyalarını her değiştirdiğinizde, bu basit kabuk komutu:

make

gerekli tüm yeniden derleme işlemlerini gerçekleştirmek için yeterlidir. make programı, hangi dosyaların güncellenmesi gerektiğine karar vermek için makefile veri tabanını ve dosyaların son değişiklik zamanlarını kullanır. Bu dosyaların her biri için veri tabanında kayıtlı olan komutları çalıştırır.

make, genellikle bir program olan bir veya daha fazla hedef adı (target name) güncellemek için makefile içindeki komutları yürütür. Eğer hiçbir -f seçeneği belirtilmemişse, make sırasıyla GNUmakefile, makefile ve Makefile adlı dosyaları arayacaktır.

Normalde dosyanızı makefile veya Makefile olarak adlandırmalısınız. (Makefile adını öneririz çünkü dizin listesinde README gibi diğer önemli dosyaların hemen yanında, belirgin bir şekilde üst sıralarda görünür.) İlk kontrol edilen isim olan GNUmakefile, çoğu makefile için önerilmez. Bu ismi, yalnızca GNU make aracına özel olan ve diğer make sürümleri tarafından anlaşılamayacak bir makefile dosyanız varsa kullanmalısınız. Eğer makefile adı - olarak belirtilirse, standart girdi okunur.

make, bir hedefi, hedefin son değişiklik tarihinden sonra değiştirilmiş olan bağımlı dosyalara (prerequisite) dayanıyorsa veya hedef mevcut değilse günceller.

Seçenekler

-b, -m Bu seçenekler, diğer make sürümleriyle uyumluluk amacıyla yoksayılır.

-B, --always-make Koşulsuz olarak tüm hedefleri oluştur.

-C dizin, --directory=dizin Makefile dosyalarını okumadan veya başka bir işlem yapmadan önce "dizin" dizinine geçiş yap. Birden fazla -C seçeneği belirtilirse, her biri bir öncekine göre yorumlanır: -C / -C etc, -C /etc komutuna eşdeğerdir. Bu seçenek genellikle make aracının özyinelemeli (recursive) çağrılarında kullanılır.

  • -d: Normal işlemlere ek olarak hata ayıklama bilgilerini yazdır. Hata ayıklama bilgisi; hangi dosyaların yeniden oluşturulmak üzere değerlendirildiğini, hangi dosya zamanlarının karşılaştırıldığını ve ne sonuçlar alındığını, hangi dosyaların gerçekten yeniden oluşturulması gerektiğini, hangi örtük kuralların (implicit rules) değerlendirildiğini ve hangilerinin uygulandığını — yani make aracının ne yapacağına nasıl karar verdiğiyle ilgili ilginç olan her şeyi belirtir.

--debug[=BAYRAKLAR] Normal işlemlere ek olarak hata ayıklama bilgilerini yazdır. Eğer BAYRAKLAR belirtilmezse, davranış -d seçeneği belirtilmiş gibi olur. BAYRAKLAR şunlar olabilir: tüm hata ayıklama çıktıları için a (-d kullanmakla aynı), temel hata ayıklama için b, daha ayrıntılı temel hata ayıklama için v, örtük kuralları (implicit rules) göstermek için i, komutların çağrılmasıyla ilgili ayrıntılar için j ve makefile dosyaları yeniden oluşturulurken hata ayıklamak için m.

-e, --environment-overrides Ortamdan (environment) alınan değişkenlere, makefile dosyalarından alınan değişkenlere göre öncelik ver.

+-f dosya, --file=dosya, --makefile=DOSYA "dosya" dosyasını bir makefile olarak kullan.

-i, --ignore-errors Dosyaları yeniden oluşturmak için yürütülen komutlardaki tüm hataları yoksay.

-I dizin, --include-dir=dizin Dahil edilen (included) makefile dosyalarını aramak için bir "dizin" dizini belirtir. Birden fazla dizini belirtmek için birkaç -I seçeneği kullanılırsa, dizinler belirtilen sırayla aranır. make aracının diğer bayraklarının argümanlarından farklı olarak, -I bayraklarıyla verilen dizinler doğrudan bayrağın arkasından gelebilir: -I dizin kullanımının yanı sıra -Idizin kullanımına da izin verilir. Bu söz dizimine, C önişlemcisinin (preprocessor) -I bayrağıyla uyumluluk sağlamak amacıyla izin verilmiştir.

-j [işler], --jobs[=işler] Aynı anda yürütülecek iş (komut) sayısını belirtir. Birden fazla -j seçeneği varsa, sonuncusu geçerli olur. Eğer -j seçeneği bir argüman olmadan verilirse, make aynı anda çalışabilecek iş sayısını sınırlamaz.

-k, --keep-going Bir hatadan sonra mümkün olduğunca devam et. Başarısız olan hedef ve ona bağımlı olanlar yeniden oluşturulamasa da, bu hedeflerin diğer bağımlılıkları yine de işlenebilir.

-l [yük], --load-average[=yük] Çalışan başka işler varsa ve yük ortalaması (load average) en az "yük" (ondalık bir sayı) ise yeni hiçbir işin (komutun) başlatılmaması gerektiğini belirtir. Argüman verilmediğinde, önceki bir yük sınırını kaldırır.

-L, --check-symlink-times Sembolik bağlar (symlinks) ile hedef arasındaki en son değiştirilme zamanını (mtime) kullan.

-n, --just-print, --dry-run, --recon Yürütülecek olan komutları yazdır, ancak bunları yürütme.

-o dosya, --old-file=dosya, --assume-old=dosya Bağımlılıklarından daha eski olsa bile "dosya" dosyasını yeniden oluşturma ve bu dosyadaki değişiklikler nedeniyle başka hiçbir şeyi yeniden oluşturma. Esasen dosya çok eski olarak kabul edilir ve kuralları yoksayılır.

-p, --print-data-base Makefile dosyalarının okunmasıyla elde edilen veri tabanını (kuralları ve değişken değerlerini) yazdır; ardından her zamanki gibi veya belirtildiği şekilde yürüt. Bu seçenek ayrıca -v anahtarı (aşağıya bakın) tarafından verilen sürüm bilgisini de yazdırır. Herhangi bir dosyayı yeniden oluşturmaya çalışmadan veri tabanını yazdırmak için make -p -f/dev/null komutunu kullanın.

-q, --question "Sorgu modu". Hiçbir komut çalıştırmaz veya hiçbir şey yazdırmaz; belirtilen hedefler zaten güncelse sıfır, aksi takdirde sıfır olmayan bir çıkış durumu döndürür.

-r, --no-builtin-rules Yerleşik örtük kuralların (builtin implicit rules) kullanımını ortadan kaldır. Ayrıca son ek kuralları (suffix rules) için varsayılan son ekler listesini temizle.

-R, --no-builtin-variables Hiçbir yerleşik değişkeni tanımlama.

-s, --silent, --quiet Sessiz çalışma; komutları yürütülürken yazdırma.

-S, --no-keep-going, --stop -k seçeneğinin etkisini iptal et. Bu, -k seçeneğinin MAKEFLAGS aracılığıyla üst düzey make komutundan miras alınabileceği özyinelemeli (recursive) bir make çağrısı veya ortamınızdaki MAKEFLAGS değişkenine -k atamış olmanız durumları dışında hiçbir zaman gerekli değildir.

-t, --touch Komutlarını çalıştırmak yerine dosyalara dokun (gerçekte değiştirmeden onları güncel olarak işaretle). Bu, gelecekteki make çağrılarını aldatmak amacıyla komutların yapılmış gibi gösterilmesi için kullanılır.

-v, --version make programının sürümünü, telif hakkını, yazarların listesini ve garanti verilmediğine dair bir bildirimi yazdır.

-w, --print-directory Diğer işlemlerden önce ve sonra çalışma dizinini içeren bir mesaj yazdır. Bu, özyinelemeli (recursive) make komutlarının karmaşık iç içe geçmiş yapılarındaki hataları izlemek için yararlı olabilir.

--no-print-directory Dolaylı olarak açılmış olsa bile -w seçeneğini kapat.

-W dosya, --what-if=dosya, --new-file=dosya, --assume-new=dosya "dosya" hedef dosyasının az önce değiştirildiğini varsay. -n bayrağıyla kullanıldığında, bu dosya üzerinde değişiklik yapsaydınız ne olacağını gösterir. -n olmadan, değişiklik zamanının yalnızca make'in hayalinde değişmesi dışında, make'i çalıştırmadan önce verilen dosya üzerinde bir touch komutu çalıştırmakla neredeyse aynıdır.

--warn-undefined-variables Tanımlanmamış bir değişkene başvurulduğunda uyar.

Çıkış Durumu

Tüm makefile dosyaları başarıyla ayrıştırıldıysa ve oluşturulan hiçbir hedef başarısız olmadıysa, GNU make sıfır çıkış durumu ile sonlanır. -q bayrağı kullanıldıysa ve make bir hedefin yeniden oluşturulması gerektiğine karar verirse bir (1) çıkış durumu döndürülür. Herhangi bir hatayla karşılaşıldıysa iki (2) çıkış durumu döndürülür.

Ayrıca Bakınız

GNU Make Kılavuzu

Hatalar

GNU Make Kılavuzu'ndaki "Sorunlar ve Hatalar" (Problems and Bugs) bölümüne bakın.

Yazar

Bu kılavuz sayfası Stanford University'den Dennis Morse tarafından katkıda bulunulmuştur. Roland McGrath tarafından yeniden düzenlenmiştir. Diğer güncellemeler Mike Frysinger tarafından yapılmıştır.

Telif Hakkı

Telif Hakkı (C) 1992, 1993, 1996, 1999 Free Software Foundation, Inc. Bu dosya GNU make'in bir parçasıdır.

GNU make ücretsiz bir yazılımdır; onu Free Software Foundation tarafından yayınlanan GNU Genel Kamu Lisansı sürüm 2 veya (tercihinize bağlı olarak) daha sonraki herhangi bir sürümün koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.

GNU make yararlı olacağı ümidiyle dağıtılmaktadır, ancak HİÇBİR GARANTİSİ YOKTUR; hatta SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK gibi zımni garantiler bile verilmemiştir. Daha fazla ayrıntı için GNU Genel Kamu Lisansına bakın.

GNU make ile birlikte GNU Genel Kamu Lisansının bir kopyasını almış olmalısınız; COPYING dosyasına bakın. Aksi takdirde, Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA adresine yazın.