Automake ve autoconf kodu derlemenin standart yolu mu?


22

Bazen uygulamaları kaynaktan derledim ve kullanıyorum:

./configure
make
sudo make install

Ancak son zamanlarda, benim ./autogen.shiçin yapılandırmayı ve komut dosyalarını oluşturan ve bunları çalıştıran rastladım .

C / C ++ / C # (mono) derlemesini düzene koymak için başka hangi yöntemler vardır? Make biraz eski görünüyor. Dışarıda yeni araçlar var mı? Seçim göz önüne alındığında hangisini kullanmalıyım?


sadece 'kod' gibi bir şey yok. Örneğin, Java kodunu alırsanız muhtemelen maven veya karınca kullanarak derlersiniz, Python alırsanız setuptools iyi bir seçimdir. Herhangi bir şeyi derlemenin standart yolları yoktur. Belki de soruyu yeniden düzenlemelisin.
diega,

İyi bir nokta. Aslında C # ile mono kodlama yapıyorum, ancak sorum C / C ++ için de geçerli.
Louis Salin,

Küçük not: autogen.sh sizin için make komutunu çalıştırmaz, sadece yapılandırın.
Sandy,

@Sandy autogen.sh, genellikle çağıran autoreconfancak aynı zamanda çağırabilecek ./configure, hatta özel komut dosyalarıdır make. Davranışının hiçbir şekilde standartlaştırıldığını sanmıyorum; temel amacı insanlar (bunun yerine hatırlatmak gerektiğini bilmek zorunda daha çalıştırabilir projesi içinde exetable dosyasını sahip olduğu autoreconf)
Umlaute

Yanıtlar:


42

Autoconf ve Automake, Unix'in evrimsel bir problemini çözmek için kuruldu.

Unix farklı yönlere geliştikçe, taşınabilir kod isteyen geliştiriciler şöyle kod yazma eğilimindeydi:

#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif

Unix farklı uygulamalara dahil edildiğinden (BSD, SystemV, birçok satıcı çatal ve daha sonra Linux ve diğer Unix benzeri sistemler), belirli bir işletim sistemine bağlı olmayan bir kod yazmak için taşınabilir kod yazmak isteyen geliştiriciler için önemli hale geldi. , ancak işletim sisteminin maruz kaldığı özelliklerde. Bu önemlidir, çünkü bir Unix sürümü yeni bir özellik sunar; örneğin "gönder" sistem çağrısı ve daha sonra diğer işletim sistemleri bunu benimser. Markalar ve sürümleri kontrol eden bir kod spagetti almak yerine, geliştiriciler özelliklere göre araştırma yapmaya başladılar.

#if HAVE_SEND
Use Send here
#else
Use something else
#endif

Kaynak kodu derlemek için çoğu README dosyası, 90'ın işaretçilerine bir config.h dosyasını düzenlemek ve sistemde uygun özelliklerin mevcut olduğunu yorumlamakta ya da test edilen her işletim sistemi yapılandırması için standart config.h dosyalarını gönderecektir.

Bu işlem hem hantal hem de hataya açıktı ve Autoconf böyle oldu. Autoconf'u, config.h'nin insan düzenleme sürecini işlevsellik için işletim sistemini denetleyen bir araçla değiştirebilecek özel makrolara sahip, kabuk komutlarından oluşan bir dil olarak düşünmelisiniz.

Sondalama kodunuzu configure.ac dosyasına yazın ve bu dosyayı derlediğiniz autoconf komutunu çalıştırıp çalıştırdığınız configure komutuna çalıştırın.

Bu nedenle, çalıştırdığınızda ./configure && make, sisteminizde mevcut olan özellikleri araştırıyor ve ardından çalıştırılabilir dosyayı tespit edilen konfigürasyon ile oluşturuyorsunuz.

Açık kaynak projeleri kaynak kod kontrol sistemlerini kullanmaya başladığında, configure.ac dosyasını kontrol etmek mantıklıydı, ancak derlemenin sonucunu (configure) değil. Autogen.sh, yalnızca autoconf derleyicisini sizin için doğru komut argümanları ile çağıran küçük bir betiktir.

-

Automake ayrıca topluluktaki mevcut uygulamalardan da çıktı. GNU projesi Makefiles için düzenli bir hedefler kümesi standartlaştırdı:

  • make all projeyi inşa eder
  • make clean derlenmiş tüm dosyaları projeden kaldırır
  • make install yazılımı kurardı
  • gibi şeyler make distve make distcheckdağıtımı için kaynak hazırlamak ve sonuç tam bir kaynak kod paketi olduğunu doğrulamak olur
  • ve bunun gibi...

Binaya uygun hale getirilmiş makefil'lerin yapımı oldukça zahmetli oldu çünkü tekrar tekrar tekrarlanan birçok kazan plakası vardı. Yani Automake, autoconf ile entegre olan ve "kaynak" Makefile (Makefile.am) adı verilen, daha sonra Autoconf'a beslenebilecek Makefiles'e işlenen yeni bir derleyiciydi.

Automake / autoconf toolchain gerçekte başka birçok yardımcı alet kullanır ve diğer özel görevler için diğer bileşenler tarafından artırılır. Bu komutları sırayla çalıştırmanın karmaşıklığı arttıkça, çalışmaya hazır bir komut dosyasına olan ihtiyaç doğdu ve işte bu noktada autogen.sh çıktı.

Bildiğim kadarıyla, Gnome bu yardımcı betiği autogen.sh'ın kullanımını tanıtan bir projeydi.


Sadece küçük bir nit: GNU standartları, yapı bağımlılıklarını asgari düzeyde evrensel araçlara indirgemek için tarball'larda gönderim yapılmasını zorunlu kılar. Ham kaynak alırsanız (örneğin bir sürüm kontrol sisteminden), oluşturulan dosyalar orada olmaz.
von marb

14

Bu alanda iki "büyük oyuncu" var; Cmake ve GNU Autotools.

  • GNU Autotools, işleri yapmanın GNU yoludur ve oldukça * nix'e odaklanmıştır. Yapmaya çalıştığınız şey için belirli yapılandırmalar üreten ve dosyalar yapan bir dizi araç sağlayan bir tür meta-build sistemidir. Bu, derleme sisteminizi doğrudan değiştirmek zorunda kalmadan kodunuzda daha fazla değişiklik yapmanıza yardımcı olur ve diğerlerinin altında kodunuzu * nix için tasarlamadığınız şekilde oluşturmanıza yardımcı olur.

  • Cmake, işleri yapmanın çapraz platform yoludur. Cmake ekibi, GCC, Visual Studio, XCode, Windows, OSX, Solaris, BSD, GNU / Linux ile pek çok farklı yoldan yazılım oluşturur. Kod tabanınızın taşınabilirliği ile ilgili endişeleriniz varsa, işte yol budur.

Daha önce de belirtildiği gibi, bazı insanlar İskoçları sever. Python'u biliyorsanız, bu çalışma ortamınızda daha fazla tutarlılık sağlayabilir.

Ruby ayrıca Rake adında bir tür meta-inşa sistemine de sahip ve bu da kendi başına oldukça havalı ve zaten Ruby ile aşina olanlar için çok kullanışlı.


6

Kişisel deneyimim olmamasına rağmen, Scons olası bir değişiklik. Yapı ortamına bağlı olarak, bir sorun olabilecek Python'da da uygulanmaktadır.


2
Taşınabilirlik sorun değil çünkü Python artık hemen hemen her yerde. SCon'larla ilgili ana şikayet, kabul edilemez derecede yavaş olmasıdır. Hızın lehine inşa doğruluğunu feda etmek için bazı düzeltmeler var, ancak hala Make ile aynı olup olmadığından emin değilim.
Alex B,

3

C # / Mono kullanıyorsanız, tüm derleme işlemlerinizi yönetmek için msbuild (MonoDevelop ve Visual Studio tarafından kullanılan .sln / .csproj dosyaları) kullanabilirsiniz.

Ardından MonoDevelop'tan derleyebilir veya xbuildkomutu en sevdiğiniz terminalde çalıştırabilirsiniz (Mono> = 2.6'da en iyi şekilde çalışır). Bu son derece kolaydır ve sizin için hiçbir çalışma gerektirmez, çünkü MonoDevelop sizin için msbuild dosyalarını idare eder ve MonoDevelop'un kullanıcı arayüzünün sizin için yapabileceklerinin ötesinde bir şeyler yapmak istemiyorsanız, onları düzenlemenize gerek yoktur.

Msbuild'e bağımlı olan kişilerin projeleri için nasıl yükleme yaptıklarını bilmiyorum, ama bunu her zaman isteyebilirsiniz. ;-)


Evet, xbuild'i biliyorum ama kendimi sadece elimi tutmak isteyen IDE'lerden kurtarmaya çalışıyorum. Ayrıca, Mono, Mono kullanılarak derlenir ve autoconf kullanır, bu yüzden biraz daha fazla bilgi edinmek istedim. Teşekkürler!
Louis Salin

1
İlginçtir ki, pek çok Mono projesi şimdi xbuild'in çok iyi çalıştığı için msbuild'e göç etmeye çalışıyor. Windows / Mac desteğini biraz daha kolaylaştırır. Mono'da çok fazla C kodu var ve xbuild'e geçmelerinin ne kadar pratik olacağını bilmiyorum. Fakat autoconf harika çalışıyor, bu yüzden sizin için ne işe yarıyorsa onu yapın. :-)
Sandy

0

C # için projeyi proje dosyalarınızdan oluşturacak olan xbuild (ve Windows'taki msbuild) kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.