Thread overview
İnşa Araçları (Build Tools) Tam Olarak Ne İşe Yararlar?
Dec 10, 2015
İbrahim
Dec 10, 2015
İbrahim
Dec 10, 2015
İbrahim
Dec 11, 2015
zafer
December 10, 2015

Allah'ın Selamı Üzerinize Olsun Arkadaşlar.

İnşa etme araçları olarak bildiğimiz Make - Makefile, Apache Ant, MSBuild vb. bir çok yazılım tam olarak ne işe yarıyorlar? İnternette başlık ve kaynak dosyaları birleştirmeye yarar diye bir yazı okudum. Örnekler vasıtasıyla açıklayabilir misiniz? Birden fazla kaynak dosya ve başlık içeren uygulamaları derlerken kullanılıyormuş, bu dosyalara ne yapıyor?

Teşekkürler!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 10, 2015

Cevabınız için teşekkürler. Aslında pek bilmesem de büyük çaplı yazılımlarda işe yarıyordur muhakkak. Mesela sağlam bir soket uygulaması yaptık. Elimizde server.d, socket.d, hash.d ve main.d var. Ben direk gidip terminalden gdc main.d -o SoketUygulaması desem ve ./SocketUygulaması diye çalıştırsam ne fark eder ki? Sonuçta main dışındaki tüm dosyalar birbirleri içinde ve/veya main içinde kullanıldılar. Bana binary olarak sadece main dosyası lazım. Yani sorum neden .o ve/veya .so ile sürekli tek tek uğraşıyorlar? Direk terminalden derle komutu verip sonra çalıştır desek olmaz mı? :) (Bu soru da yanlış gelebilir fakat bilgisizlikten kaynaklı bir soru, kusura bakma Ali Hocam). Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 10, 2015

Tamam, teşekkürler. Ben genelde Make'in C/C++ uygulamalarında görüyorum ve bildiğim kadarıyla Make sadece GNU/Linux ve Mac OSX sistemlerinde çalışıyor çünkü bash kullanıyor. Apache Ant'ın ise yalnızca Java'da kullanıldığını görüyorum ve çapraz platform desteği olduğu için diğer sistemlerde de sorun çıkarmıyor. Acaba C/C++, D ve OCaml uygulamalarında da Apache Ant kullansak sorun olur mu? Teşekkürler!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 10, 2015

Bildiğimiz ve uyguladığımız kurallar:

  • .d dosyaları derlenerek .o dosyası oluşturulur (çoğu durumda doğrudan program da oluşturulur ama onu gözardı ediyorum)

  • .o dosyaları birleştirilerek .so (kütüphane dosyası) oluşturulur

  • .so dosyaları ve .o dosyaları birleştirilerek program oluşturulur

  • .falanca dosyası 'abc' programı tarafından işlenerek .filanca dosyası oluşturulur

  • vs.

Bunlara ek olarak işlem sıraları ve bağımlılık da önemli:

  • foo.d modülü değiştiği an bar.d dosyasını da tekrar derlemek gerekir

  • .falanca dosyasının oluşturulabilmesi için önce 'abc' dosyasının oluşturulması gerekir

  • 'abc' dosyasının oluşturulabilmesi için önce 'xyz' programının işletilmesi gerekir

  • vs.

Görüldüğü gibi, bir programın oluşturulabilmesi için bir çok kuralın ve komutun bilinmesi gerekir. Bunu elle yapmak çok külfetli olduğundan inşa araçları kullanırız. Örneğin, yukarıda sıraladığım herşey bir Makefile'a yazılır ve gerisini 'make' halleder.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 10, 2015

Alıntı (İbrahim):

>

terminalden gdc main.d -o SoketUygulaması desem

(Tabii aslında diğer .d dosyalarını da yazmak gerekiyor: 'gdc server.d socket.d hash.d main.d -o SoketUygulaması'. Yoksa, bağlayıcı sembolleri bulamaz.)

Alıntı:

>

./SocketUygulaması diye çalıştırsam ne fark eder ki?

Dediğin gibi, küçük ve bir iki komutla oluşturulan programlarda ve hiçbir şey farketmez.

Alıntı:

>

neden .o ve/veya .so ile sürekli tek tek uğraşıyorlar?

Zaman kazanmak için. Örneğin, tek C++ dosyasının 20 saniye kadar uzun sürede derlendiği olabiliyor. (Aslında CTFE, mixin, vs. gibi derleme zamanı olanağından yararlanan D programları da çok yavaş derlenebiliyor.)

Bağlama işlemi de çok uzun sürebilir.

Alıntı:

>

Direk terminalden derle komutu verip sonra çalıştır desek olmaz mı? :)

Olur. Ama terminalden önce 'make' deyip sonra çalıştır deyince hem daha hızlı oluyor hem de "şunu derlemeden önce ötekini çalıştırmalıydım; unutmuşum" gibi sorunlar kalmıyor. 'make' otomatik hale getiriyor.

Örneğin, benim kitapların pdf dosyalarını da içeren ddili.org'u oluşturmam 6 dakika kadar sürüyor. Herşeyi baştan oluşturmak yerine 'make' diyorum ve yalnızca gereken parça oluşturulyor. Süre böylece bir kaç saniyeye iniyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 10, 2015

Alıntı (İbrahim):

>

C/C++, D ve OCaml uygulamalarında da Apache Ant kullansak sorun olur mu?

Bildiğim kadarıyla sorun olmaz.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 12, 2015

Selamlar İbrahim,

Bu tür programların faydasını kelimelerle anlatmak biraz zor oluyor. Hani derler ya, bazı şeyler anlatılmaz yaşanır :)

Yazılım geliştirme işlemi aslında rutin bir süreci içerir. Kodla - çalıştır şeklinde devam eden süreç, yazılım bitene kadar devam eder. Bu ilerlemede seninde görebileceğin gibi çalıştırma işlemi oldukça sık tekrarlanır. Dolayısıyla ne kadar basit bile olsa ki bazen çok karışıkta olabiliyor. Bu kadar sık tekrar eden bir işlemin külfeti oldukça fazladır. Bu ve Ali'nin bahsettiği sebepler sonucu inşa araçları geliştirilmiştir.

Ayrıca son dönemlerde yazılımlara bir çok ek paketlerin eklenmesi ve bunların yönetim zorluğu ortaya çıkınca bu sefer hem inşa hemde paket yönetimi yapabilen daha becerikli araçlar ortaya çıkmaya başladı. Örneğin Apache Ant, NodeJS npm, Php composer gibi araçlar hem inşa işlemini daha düzenli ve kolay bir hale getirirken hemde projenize dışarıdan eklemek istediğniz paketlerin yönetimi konusunda size yardımcı oluyor.

Sen Apache Ant üzerinde karar kılmışsın ama eğer kullanmak istersen D dilininde kendi inşa ve paket yönetim aracı DUB (http://code.dlang.org/download) var. DUB ile hem yeni bir D projesi oluşturabilir hemde bu projenin inşa ve paket yönetimini yapabilirsin. DUB ile ilgili bir yazı hazırlamaya çalışıyorum, tamamladığımda yayınlacağım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]