Forum: Diğer Konular RSS
İnşa Araçları (Build Tools) Tam Olarak Ne İşe Yararlar?
Build Automation Software
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: İnşa Araçları (Build Tools) Tam Olarak Ne İşe Yararlar?
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!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
İbrahim #3
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İ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.)

./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.

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.

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
İbrahim #5
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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!
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İbrahim:
C/C++, D ve OCaml uygulamalarında da Apache Ant kullansak sorun olur mu?

Bildiğim kadarıyla sorun olmaz.

Ali
zafer #7
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 19:48:43 (UTC -08:00)