← man/dev_and_programming
gnumake — man gnumake — 80×24
ugur@toprak:~/man/dev_and_programming$man gnumake
Bölüm 1 Geliştirme & Programlama

gnumake

Program gruplarını yönetmek için GNU make aracı

Sözdizimi

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

Uyarı

Bu kılavuz sayfası, GNU make belgelendirmesinin bir özetidir. GNU projesi nroff kullanmadığından, bu sayfa yalnızca ara sıra güncellenir. Eksiksiz ve güncel belgelendirme için, make.texi Texinfo kaynak dosyasından üretilen make.info Info dosyasına bakın.

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 gerekli komutları yürütmektir. Bu kılavuz, Richard Stallman ve Roland McGrath tarafından yazılan ve şu anda Paul Smith tarafından sürdürülen make programının GNU uygulamasını açıklar. Örneklerimizde en yaygın oldukları için C programları gösterilmektedir, ancak derleyicisi bir kabuk komutuyla çalıştırılabilen herhangi bir programlama diliyle भी make kullanabilirsiniz. Aslında make sadece programlarla sınırlı değildir. Diğer dosyalar değiştikçe bazı dosyaların otomatik olarak güncellenmesi gereken herhangi bir görevi tanımlamak için de onu kullanabilirsiniz.

make kullanmaya hazırlanmak için, programınızdaki dosyalar arasındaki ilişkileri tanımlayan ve her bir dosyayı güncellemek için gerekli komutları belirten makefile adında bir dosya yazmalısınız. Bir programda genellikle çalıştırılabilir dosya, kaynak dosyalarının derlenmesiyle oluşturulan nesne (object) dosyalarından güncellenir.

Uygun bir makefile dosyası oluşturulduktan sonra, bazı kaynak dosyalarını her değiştirdiğinizde, şu 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 veritabanını ve dosyaların son değişiklik zamanlarını kullanır. Bu dosyaların her biri için veritabanında kayıtlı olan komutları yürütür.

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

Normal şartlarda makefile dosyanızı ya makefile ya da Makefile olarak adlandırmalısınız. (Dizin listesinin başında, README gibi diğer önemli dosyaların hemen yanında belirgin bir şekilde görünmesi nedeniyle Makefile adını öneririz.) Kontrol edilen ilk ad olan GNUmakefile, çoğu makefile için önerilmez. Bu adı, yalnızca GNU make programına özgü olan ve make programının diğer sürümleri tarafından anlaşılamayacak bir makefile dosyanız varsa kullanmalısınız. Eğer makefile parametresi - ise, standart girdi okunur.

make, eğer bir hedef, hedefin son değiştirilme zamanından sonra değiştirilmiş olan önkoşul dosyalara bağlıysa veya hedef mevcut değilse o hedefi günceller.

Seçenekler

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

-B, --always-make Koşulsuz olarak tüm hedefleri make işlemine tabi tut.

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

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

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

-e, --environment-overrides Çevreden alınan değişkenlere, makefile dosyalarındaki değişkenlere göre öncelik ver.

+-f dosya, --file=dosya, --makefile=dosya Makefile olarak dosya 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 makefile dosyalarını aramak için bir dizin belirtir. Birden fazla dizin belirtmek için birkaç -I seçeneği kullanılırsa, dizinler belirtilen sırayla aranır. make'in diğer bayraklarının argümanlarından farklı olarak, -I bayrakları ile verilen dizinler doğrudan bayrağın arkasından gelebilir: -Idizin kullanımına da -I dizin kullanımına olduğu gibi izin verilir. Bu sözdizimine, C önişlemcisinin -I bayrağı ile uyumluluk amacıyla izin verilmektedir.

-j [isler], --jobs[=isler] Eşzamanlı olarak çalıştırılacak işlerin (komutların) sayısını belirtir. Birden fazla -j seçeneği varsa, sonuncusu geçerli olur. -j seçeneği bir argüman olmadan verilirse, make eşzamanlı olarak çalışabilecek işlerin sayısını sınırmayacaktır.

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

-l [yuk], --load-average[=yuk] Çalışan başka işler varsa ve yük ortalaması en az yuk (bir kayan noktalı sayı) ise yeni hiçbir işin (komutun) başlatılmaması gerektiğini belirtir. Argüman verilmezse, ö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 komutları yazdır, ancak bunları yürütme.

-o dosya, --old-file=dosya, --assume-old=dosya dosya bağımlılıklarından daha eski olsa bile onu yeniden oluşturma ve dosya içindeki değişiklikler nedeniyle hiçbir şeyi yeniden oluşturma. Temelde dosya çok eskiymiş gibi işlem görür ve kuralları yoksayılır.

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

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

-r, --no-builtin-rules Yerleşik örtük kuralların (implicit rules) kullanımını ortadan kaldır. Ayrıca son ek kuralları 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'ten miras alınabileceği özyinelemeli bir make durumu veya ortamınızda MAKEFLAGS içine -k seçeneğini ayarladığınız durumlar dışında hiçbir zaman gerekli değildir.

-t, --touch Komutlarını çalıştırmak yerine dosyaları dokunulmuş olarak işaretle (gerçekten değiştirmeden güncel olarak işaretle). Bu seçenek, gelecekteki make çağrılarını yanıltmak 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 bir listesini ve hiçbir garanti olmadığını belirten bir bildirimi yazdır.

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

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

-W dosya, --what-if=dosya, --new-file=dosya, --assume-new=dosya Hedef dosyanın henüz değiştirilmiş gibi davranmasını sağla. -n bayrağı ile kullanıldığında, bu dosya üzerinde değişiklik yapmanız durumunda 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 belirtilen 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ılmışsa ve oluşturulan hiçbir hedef başarısız olmamışsa GNU make sıfır durum koduyla çıkar. -q bayrağı kullanılmışsa ve make bir hedefin yeniden oluşturulması gerektiğine karar verirse bir durum kodu döndürülür. Herhangi bir hatayla karşılaşılmışsa iki durum kodu döndürülür.

Ayrıca Bakınız

The GNU Make Manual

Hatalar

The GNU Make Manual kılavuzundaki 'Problems and Bugs' (Sorunlar ve Hatalar) 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 işlenmiştir. Sonraki 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 programının bir parçasıdır.

GNU make özgür 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 koşulları altında yeniden dağıtabilir ve/veya değiştirebilirsiniz.

GNU make yararlı olması umuduyla dağıtılmaktadır, ancak HİÇBİR GARANTİSİ YOKTUR; hatta TİCARİ ELVERİŞLİLİK veya BELİRLİ BİR AMACA UYGUNLUK gibi örtük bir garanti bile verilmez. 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.

GNU 22 Ağustos 1989 MAKE(1)