GNU Autotools - GNU Autotools

GNU logosu

GNU Autotools olarak da bilinen, GNU Derlemesi Sisteminin , bir takımdır programlama araçları yapımında yardımcı olmak üzere tasarlanmış kaynak kod paketleri taşınabilir birçok Unix benzeri sistemler.

Bir yazılım programını taşınabilir yapmak zor olabilir: C derleyicisi sistemden sisteme farklılık gösterir; bazı sistemlerde belirli kütüphane işlevleri eksiktir; başlık dosyalarının farklı adları olabilir. Bunu halletmenin bir yolu, önişlemci yönergeleri ( #ifdef ) aracılığıyla seçilen kod blokları ile koşullu kod yazmaktır ; ancak çok çeşitli yapı ortamları nedeniyle bu yaklaşım hızla yönetilemez hale gelir. Autotools, bu sorunu daha yönetilebilir bir şekilde ele almak için tasarlanmıştır.

Autotools, GNU araç zincirinin bir parçasıdır ve birçok özgür yazılım ve açık kaynak paketinde yaygın olarak kullanılmaktadır . Bileşen araçları, özel mülk yazılımla kullanımına izin veren özel lisans istisnaları ile GNU Genel Kamu Lisansı altında lisanslanan özgür yazılımdır .

GNU Derleme Sistemi, iki aşamalı bir süreci kullanarak birçok program oluşturmayı mümkün kılar: configure ve ardından make .

Bileşenler

Autoconf ve automake akış diyagramı

Autotools, GNU yardımcı programları olan Autoconf , Automake ve Libtool'dan oluşur . Bununla birlikte sıklıkla kullanılan diğer ilgili araçlar arasında GNU'nun make programı, GNU gettext , pkg-config ve aynı zamanda GCC olarak da adlandırılan GNU Derleyici Koleksiyonu bulunur .

GNU Autoconf

Autoconf , belirli bir kaynak kod gövdesini karakterize eden configure bir configure.ac dosyanın içeriğine dayalı bir komut dosyası oluşturur . configure Senaryo, ne zaman koşmak, oluşturma ortamını tarar ve alt üretir config.status sırayla, en yaygın diğer giriş dosya ve dönüştürür, senaryoyu Makefile.in çıktı dosyaları (içine Makefile o yapı çevre için uygundur). Son olarak, make program Makefile kaynak koddan çalıştırılabilir programlar oluşturmak için kullanır .

Autotools'un karmaşıklığı, bir kaynak kod gövdesinin oluşturulabileceği çeşitli koşulları yansıtır.

  • Bir kaynak kod dosyası değiştirilirse, yeniden çalıştırmak yeterlidir make , bu da kaynak kod gövdesinin yalnızca değişiklikten etkilenen kısmını yeniden derler.
  • Bir ederse .in dosya değişti o zaman tekrarında yeterlidir config.status ve make .
  • Kaynak kodun gövdesi başka bir bilgisayara kopyalanırsa, yeniden çalıştırmak configure (çalışır config.status ) ve make . (Bu nedenle, Autotools kullanan kaynak kodu, configure oluşturan dosyalar olmadan normal olarak dağıtılır .)
  • Kaynak kodunun vücut sonra, daha temelden değiştirilirse configure.ac ve .in dosyalar ihtiyaç değişmiş ve sonraki tüm adımlar takip edilecek.

Autoconf, dosyaları işlemek için m4 makro sisteminin GNU uygulamasını kullanır .

Autoconf autoheader , C başlık dosyalarını yönetmeye yardımcı olmak için kullanılan birkaç yardımcı programla birlikte gelir ; autoscan Autoconf için bir başlangıç ​​girdi dosyası oluşturabilen; ve ifnames programda kullanılan C ön işlemci tanımlayıcılarını listeleyebilir.

GNU Automake

Automake Makefile , sırayla make yardımcı programıyla işlenen taşınabilir e- postaların oluşturulmasına yardımcı olur . Girdisini olarak alır ve yapılandırma betiği tarafından dosya çıktısını oluşturmak için kullanılan Makefile.am dönüştürür . Ayrıca otomatik bağımlılık takibi gerçekleştirir; bir kaynak dosyası her derlendiğinde, bağımlılıklar listesi (örneğin, C başlık dosyaları) kaydedilir. Daha sonra, make her çalıştırıldığında ve bir bağımlılık değişmiş gibi göründüğünde, bağımlı dosyalar yeniden oluşturulacaktır. Makefile.inMakefile

GNU Libtool

Libtool , çeşitli Unix benzeri işletim sistemlerinde statik ve dinamik kitaplıkların oluşturulmasına yardımcı olur . Libtool bunu, kütüphane oluşturma sürecini soyutlayarak, çeşitli sistemler arasındaki farklılıkları gizleyerek (örn. Linux sistemlerine karşı Solaris ) başarır .

Kullanım

Autotools, yazılım geliştiricilerin platformlar arası yazılım yazmalarına ve yazılımı kendileri oluşturmak isteyen kullanıcılar için kaynak kodu biçiminde de dahil olmak üzere çok daha geniş bir kullanıcı topluluğunun kullanımına sunmalarına yardımcı olur . Çoğu durumda kullanıcılar, sağlanan configure betiği ( Bourne uyumlu bir kabuğun varlığı dışında hiçbir bağımlılığı olmayan ) ve ardından bir make programı çalıştırır. Otomatik araçların bilgisayarda yüklü olmasına gerek yoktur.

Hem yapı makinesinde yerel programlar oluşturmak hem de diğer mimarilere çapraz derlemek için kullanılabilir.

MinGW kullanılarak bir Linux veya başka bir Unix benzeri yapı sisteminden bir Windows ana bilgisayarında çalıştırılacak çapraz derleme yazılımı da mümkündür, ancak yerel derleme genellikle Bourne'u çalıştıramayan işletim sistemlerinde ( Microsoft Windows sistem ailesi gibi) istenir. kendi başlarına kabuk betikleri. Bu, Windows işletim sisteminde böyle bir yazılımın oluşturulmasını, Bourne kabuğunu standart bir bileşen olarak sağlayan Unix benzeri bir sistemden biraz daha zor hale getirir . Cygwin veya MSYS sistemi, Unix benzeri bir uyumluluk katmanı sağlamak için Windows'un üstüne kurulabilir , ancak yapılandırma komut dosyalarının çalışmasına izin verir . Cygwin ayrıca Windows içinde neredeyse eksiksiz bir Unix benzeri sistem sağlayan GNU Derleyici Koleksiyonunu , GNU yapımını ve diğer yazılımları sağlar; MSYS , GCC'nin MinGW sürümüyle çalışmak üzere tasarlanmış GNU yapımı ve diğer araçları da sağlar .

Geliştiricinin son kullanıcı için bir yapılandırma betiği sağlaması beklenmesine rağmen , bazen kullanıcı yapılandırma komut dosyasının kendisini yeniden oluşturmak isteyebilir. Kullanıcı kaynak kodun kendisini değiştirmek isterse, bu tür bir çalışma gerekli olabilir. Bu tür kullanıcıların Autotools'u kurması ve autoreconf gibi bileşenleri kullanması gerekir .

Otomatik yapılandırma configure yavaş olabilir çünkü çeşitli kitaplıkların, başlık dosyalarının ve dil özelliklerinin mevcut olup olmadığını test etmek için C derleyicisi gibi programları birçok kez çalıştırır. Bu özellikle Cygwin'i etkiler ve yerel bir fork sistem çağrısının olmaması nedeniyle , yapılandırma betiklerini Linux'tan önemli ölçüde daha yavaş çalıştırabilir .

Eleştiri

FreeBSD geliştiricisi Poul-Henning Kamp , ACM Queue sütununda GNU Build System'ı eleştirdi:

Buradaki fikir, configure betiğinin yaklaşık 200 otomatik test gerçekleştirmesidir, böylece kullanıcı libtool'u manuel olarak yapılandırmak zorunda kalmaz. Bu korkunç derecede kötü bir fikir, 1980'lerde ortaya çıktığında zaten çok eleştirilmişti, çünkü başlangıçta taşınabilirlik kalitesine sahip olmaktan ziyade, yapılandırma betiğinin kaplamasının arkasında kaynak kodunun taşınabilirmiş gibi davranmasına izin veriyordu. Yapılandırma fikrinin hayatta kalması bir saçmalık.

Kamp , 1980'lerin çok sayıdaki Unix varyantlarının doğasında bulunan taşınabilirlik sorunlarında derleme sisteminin geçmişini çizer ve bu tür derleme sistemlerinin var olma ihtiyacından yakınır:

libtool için 31.085 yapılandırma satırı, <sys / stat.h> ve <stdlib.h> 'nin var olup olmadığını kontrol etse de, bunlardan yoksun olan Unixen libtool'u yürütmek için yeterli belleğe veya 16 MB için yeterince büyük disklere sahip olmasa da kaynak kodu.

Eleştiriye Tepkiler

Autotools eleştirmenleri sık sık kullanıcılarına daha fazla basitlik sağlayan alternatifleri savunsa da, bazıları bunun mutlaka iyi bir şey olmadığını savundu. Autotools, 2nd Edition: A Practitioner's Guide to GNU Autoconf, Automake ve Libtool kitabının yazarı John Calcote şunları söyledi:

Autotools, aslında orada bulunan diğer tüm oluşturma araçlarından daha şeffaftır. Tüm bu diğer araçların (cmake, maven, vb.) - çok daha basit olduğu iddia edilen, çünkü kullanıcıyı derleme işleminin temelindeki ayrıntılardan izole ediyorlar - bu aracın temel hatası, bu yalıtımın kullanıcıları yapabilmekten alıkoymasıdır. projeye özgü benzersiz yapı hedeflerini gerçekleştirmek için ihtiyaç duydukları değişiklikler.

Cmake, maven, gradle veya her neyse, bu yönüyle ilgili söyleyecek iyi şeylerden başka hiçbir şeyi olmayan biri, varsayılanlardan yeterince uzaklaşmalarını gerektiren bir proje üzerinde çalışmamıştır. Hepsini kullandım ve bazı "her şeyi yap" (istediğim dışında) araç işlevinin eksikliklerinin üstesinden nasıl gelineceğini belirlemeye çalışırken hayal kırıklığı içinde saatler harcadım. Bu, Autotools ile ilgili bir sorun değildir. Bu iş parçacığında daha önce de belirtildiği gibi, kabuk komut dosyasını bir configure.ac dosyasına bırakabilir ve komut dosyasını bir Makefile.am dosyasına yapabilirsiniz. Şeffaflığın tanımı budur. Var olan başka hiçbir araç bu düzeyde esnekliğe izin vermez.

Ayrıca bakınız

Referanslar

Dış bağlantılar