Autotools, Cmake ve Scons arasındaki farklar nelerdir?
Autotools, Cmake ve Scons arasındaki farklar nelerdir?
Yanıtlar:
Gerçekte, Autotools'un 'tek gerçek' tasarruf zarafeti ', tüm GNU projelerinin büyük ölçüde kullandığı şeydir.
Autotools ile ilgili sorunlar:
Çalışıyor ... çoğu zaman ... Autotools hakkında söyleyebileceğiniz tek şey. Temel, temel araç zinciri kodu için GNU projesini gerçekten ilgilendiren birkaç sorunu çözen bir sistemdir. (Düzenleme (2014/05/24): kaygı bu tür bir potansiyel olduğunu belirtmek gerekir KÖTÜ kısmen size, bu düşünceden ve doğru modern sistemlerle saplı Heartbleed hakkında-endişelenmek için bir şey gerçektenAutotools'un düzelttiği şeylerin çoğuyla ilgilenen hiçbir işiniz yok. GNU muhtemelen kod tabanının, Heartbleed ile olanların ışığında büyük ölçüde kaldırılması gerekiyor) Projenizi yapmak için kullanabilirsiniz ve Linux dışında herhangi bir yerde çalışmayı beklemediğiniz ufacık bir proje için iyi çalışabilir. GNU araç zinciri açıkça doğru şekilde çalışıyor. "Linux ile güzel bir şekilde bütünleştiği" ifadesi oldukça cesur ve yanlıştır . GNU araç takımıyla oldukça iyi bütünleşir ve BT'nin hedefleri ile ilgili problemleri çözer.
Bu, buradaki başlıkta tartışılan diğer seçeneklerle ilgili bir sorun olmadığı anlamına gelmez.
SCons, Make / GMake / etc'nin yerine geçer. ve oldukça hoş görünüyor, her şey göz önünde
Bu iş parçacığında CMake için verilen örnekler biraz sahte.
Ancak...
Gerçekte, hedefleriniz burada seçtiğiniz şeyi dikte etmelidir.
Pek çok projenin qmake, Autotools, vs.'den ayrılması ve CMake'e geçmesinin bir nedeni var. Şimdiye kadar, CMake tabanlı bir projenin ya çapraz derleme durumuna ya da bir VisualStudio kurulumuna düşmesini bekleyebilirim ya da proje sadece Windows veya yalnızca OSX parçalarını hesaba katmadığı için sadece az miktarda temizlemeye ihtiyaç duyuyorum kod tabanına. Gerçekten bir SCons tabanlı projeden - ve tam olarak 1/3 veya daha fazla Autotools projesinin bir veya Scratchbox2 bir ana bina dışında herhangi bir bağlamda inşa etmesini engelleyen SOMETHING yanlış almasını bekliyoruz olamaz.
Araçları kimin kullandığı arasında önemli bir ayrım yapılmalıdır. Cmake, yazılımı oluştururken kullanıcı tarafından kullanılması gereken bir araçtır. Otomatik araçlar, herhangi bir SuS uyumlu sistemde bulunan standart araçları kullanarak yazılımı oluşturmak için kullanılabilecek bir dağıtım tarball üretmek için kullanılır. Başka bir deyişle, otomatik araçlar kullanılarak oluşturulan bir tarball'dan yazılım yüklüyorsanız, otomatik araçları kullanmıyorsunuzdur . Öte yandan, Cmake kullanan bir yazılım yüklüyorsanız, edilir CKağıt kullanarak ve yazılım oluşturmak için yüklü olması gerekir.
Kullanıcıların büyük çoğunluğunun kutularına otomatik araçların yerleştirilmesine gerek yoktur. Tarihsel olarak, birçok geliştirici, yapılandırılmış komut dosyasını yeniden oluşturmak için kullanıcıyı autoconf'u çalıştırmaya zorlayan hatalı biçimlendirilmiş tarball'ları dağıttığı için çok karışıklığa neden olmuştur ve bu bir paketleme hatasıdır. Çoğu büyük linux dağıtımının, varsayılan olarak hiçbirini yüklememeleri gerektiğinde, otomatik araçların birden çok sürümünü yüklemeleri nedeniyle daha fazla karışıklık meydana gelmiştir. Daha da fazla karışıklık, yazılımlarını dağıtmak için tarball oluşturmak yerine bir sürüm kontrol sistemi (örn. Cvs, git, svn) kullanmaya çalışan geliştiricilerin nedenidir.
asciidoc
veya help2man
veya daha doxygen
da önemlisi olabilir . Bu, otomobiller için büyük bir pazarlama problemi oldu. Kullanıcılar yanlış olarak tarball ve VCS arasındaki farkı anlamadıkları için autoconf'a ihtiyaç duyduklarını düşünüyorlar.
GNU kodlama standartlarıyla ilgili değil.
Otomatik araçların şu andaki faydaları - özellikle de automake ile kullanıldığında - Linux dağıtımı oluşturmaya çok iyi entegre olmalarıdır.
Örneğin cmake ile her zaman "ihtiyacım olan -DCMAKE_CFLAGS veya -DCMAKE_C_FLAGS mıydı?" Hayır, ikisi de değil, "-DCMAKE_C_FLAGS_RELEASE". Veya -DCMAKE_C_FLAGS_DEBUG. Kafa karıştırıcı - autoconf'ta, sadece ./configure CFLAGS = "- O0 -ggdb3" ve elinizde.
İnşa altyapıları ile entegrasyon olarak, scons kullandığınız olamayacağını sorunu var make %{?_smp_mflags}
, _smp_mflags
kabaca sistem gücünü (yönetici ayarlayabilir) için genişleyen bir RPM makro olmanın bu durumda. İnsanlar -jNCPUS gibi şeyleri çevrelerine koyarlar. Bu çalışmayan scons ile, bu yüzden scons kullanan paketler sadece dağıtım dağıtılmış olabilir.
./configure CFLAGS=-O0
makefile CFLAGS üzerine yazan ve bunun yerine kullanıcının çalışmasını gerektiren paketlerle başarısız olur ./configure --enable-debug
. (örneğin tmux
).
Autotools hakkında bilmek önemli olan, genel bir yapı sistemi olmamalarıdır - GNU kodlama standartlarını uygularlar ve başka hiçbir şey yapmazlar. Tüm GNU standartlarına uyan bir paket yapmak istiyorsanız, Autotools iş için mükemmel bir araçtır. Eğer yapmazsanız, Scons veya CMake kullanmalısınız. (Örneğin, bu soruya bakın .) Bu yaygın yanlış anlama, Autotools'taki hayal kırıklığının çoğunun geldiği yerdir.
AUTOMAKE_OPTIONS = -foreign
Gözlerinde farklı Makefile.am
. (Ya -foreign
da senin autogen.sh
. Sanırım neredeyse herkes bunu kullanıyor.)
installcheck
ve distclean
. Autotools'u kullanırken bu tür davranışları değiştirmeye çalışırsanız, sadece zamanınızı boşa harcıyorsunuz.
Geliştiriciler açısından bakıldığında, cmake şu anda kullanımı en kolay olanıdır, ancak kullanıcı açısından otomatik araçların büyük bir avantajı vardır.
autotools tek bir dosya yapılandırma betiği oluşturur ve onu oluşturmak için tüm dosyalar dağıtım ile birlikte gönderilir. grep / sed / awk / vi yardımıyla anlaşılması ve düzeltilmesi kolaydır. Bunu, / usr / share / cmak * / Modules içinde çok sayıda dosyanın bulunduğu Cmake ile karşılaştırın; yönetici erişimi olmadığı sürece kullanıcı tarafından düzeltilemez.
Yani, eğer bir şey tam olarak işe yaramazsa, standart Unix araçları (grep / sed / awk / vi vb.) Yapı sistemini anlamak zorunda kalmadan balyozla kolayca "sabitlenebilir".
Neyin yanlış olduğunu bulmak için cmake build dizininizi hiç araştırdınız mı? Yukarıdan aşağıya okunabilen basit shellscript ile karşılaştırıldığında, neler olduğunu öğrenmek için oluşturulan Cmake dosyalarını takip etmek oldukça zordur. Ayrıca CMake ile FindFoo.cmake dosyalarını uyarlamak yalnızca CMake dili hakkında bilgi sahibi olmakla kalmaz, aynı zamanda süper kullanıcı ayrıcalıkları da gerektirebilir.