‫Merhaba ve hoş geldiniz.
‫Bu derste, Unreal'da C++ dosyalarının derlenmesi ile ilgili ana adımları anlayacağız.
‫Nasıl çalıştıklarına bir bakalım.
‫Yani yakında dışarıdan, diğer dosyalardan kod kullanmaya başlamamızın zamanı gelecek ve bunun C++'da nasıl
‫çalıştığını öğrenmemiz gerekiyor.
‫Bunu yapmak için, biraz dolambaçlı bir yoldan gitmemiz ve C++ kodumuzu ikili dosyaya
‫derlerken neler olduğunu daha ayrıntılı olarak anlamamız gerekir.
‫İşte kullanılan derleme adımları.
‫Kodunuzla, C++ dosyalarınızla, başlık dosyalarınızla, hepsi çeşitli metin dosyalarında başlarız.
‫Bunlar Unreal Header Tool adı verilen bir araca aktarılır.
‫Şimdi, bu araç tüm gerçek dışı özel sözdizimi parçalarını almaktan ve bunları daha fazla C++ kodu oluşturmak
‫için kullanmaktan sorumludur.
‫Şimdi bu unreal'a özgü sözdizimine sahip olduğumuz bazı örneklere bir göz atalım; büyük harflerle
‫yazılmış bu yeni sınıf unreal'a özgü sözdizimidir ve buradaki Crypt Reader API şeyi ve buradaki oluşturulmuş gövde
‫de öyledir.
‫Ve temelde burada olan şey, unreal header aracının kodunuzdaki bu farklı sözdizimi parçalarını görmesi ve
‫tamam, işimi yapmam gerekiyor demesidir.
‫Oraya girip bir sürü şey eklemem gerekiyor.
‫Oluşturulan gövdenizi Unreal kullanırken hayatımızı kolaylaştıran bir grup kodla değiştirecek.
‫Ayrıca U özellikleri ve yeni işlevler gibi şeyler de yapar.
‫Plan dünyasıyla iletişim kurabilmesi için ihtiyaç duyduğu her şeyi ekler.
‫Yani bu ilk adım.
‫Tüm gerçek dışı özel öğelerini gerçek C++'a dönüştürür.
‫Gerçek C++'ı elde ettikten sonra, bunu üç adımdan oluşan standart bir C++ derleme sürecine
‫sokabiliriz.
‫Birincisi, ön işleme adımıyla ilgilenmektir, böylece bu aslında C++ sözdiziminin herhangi birine dokunabilir ve aslında yalnızca
‫bir karma ile başlayan satırlarla ilgilenir.
‫Yani bu ön işleme yönergelerinden birkaç tanesine sahibiz.
‫Bunlar önişlemci tarafından ele alınır.
‫Bir sonraki adım aslında derleyici dediğimiz şeydir.
‫Bir kodu alır ve çalıştırılabilir ikili dosyaya dönüştürür, ancak adımı tam olarak tamamlamaz çünkü bunu
‫yalnızca çeviri birimleri olarak bilinen bireysel C++, temelde C++ dosyaları üzerinde yapar.
‫Yani bir C++ dosyasını alır ve bunu her bir C++ dosyası için ayrı ayrı ikili dosyaya çevirir.
‫Üçüncü adım ise tüm bunları bir araya getiren ve aslında tek bir yürütülebilir dosyayı çalıştırabileceğimiz bir yürütülebilir
‫dosya çıktısı veren bağlayıcıdır.
‫Şimdi bu standart derleme adımlarını örnek bir dosya ile biraz daha ayrıntılı olarak inceleyelim.
‫Bir oyunumuz olduğunu hayal edin.
‫CP Ve bu çok ama çok basit bir oyun çünkü tek yaptığı bir ve birleri toplamak, ancak bir ve birleri
‫toplamak için matematikte farklı bir dosyada bildirilen bir işlevi kullanmak gerekiyor.
‫H Yani matematik öyle diyor.
‫AD, ama aslında ne yaptığını tanımlamıyor.
‫Yani matematikte bu iş bitti.
‫CP Ve bunun gerçekten de çok basit bir uygulama olduğunu görebilirsiniz.
‫Şimdi önişlemci adımında ne oluyor?
‫Dediğim gibi, bir hash ile başlayan önişlemci yönergeleri ile ilgilenir.
‫Yani karma matematik içerir, bu da temelde matematikteki her şeyi buraya kopyalayın anlamına gelir.
‫Yani yaptığı şey, bu iki dosyayı almak ve bunları birleştirerek Game I adında yeni
‫bir çıktı dosyası oluşturmaktır. temelde games include ve Master H'den tanımın dahil edildiğini ve hash
‫önişlemci direktifinin yerini aldığını görebilirsiniz.
‫Şimdi Game II'nin ADD işlemi için bir tanımı var ve ardından ön işlemciyi matematik DHCP üzerinde çalıştırıyoruz.
‫Ancak herhangi bir önişlemci yönergesi olmadığından, temelde hiçbir şey değiştirilmez.
‫Bir sonraki adım olan derleme, muhtemelen en önemli ve karmaşık
‫adımdır, çünkü yaptığı şey, her bir dosyadaki C++'ı alıp ikiliye dönüştürmektir, ancak bu tam bir ikilik değildir,
‫çünkü örneğin, oyunum aslında AD'nin nasıl uygulanacağını bilmiyor, sadece bu ekleme işlevinin
‫şeklini biliyor.
‫Dolayısıyla bunun daha sonra doldurulması gerekir ve bu da bağlayıcı tarafından doldurulur.
‫Yani bağlayıcı, oyun obj dosyası için oluşturulan ikiliyi ve ana dosya için oluşturulan ikiliyi alacak
‫ve bir oyun yapmak için bunları bir araya getirecektir.
‫XY, her ikisinin ikili dosyasını birleştirir ve son olarak, ihtiyaç duyduğu her şeyin tanımına sahip olduğu için gerçekten çalıştırabileceğimiz
‫eksiksiz bir yürütülebilir dosyadır.
‫Şimdi, neden bu kadar karmaşık bir sürecimiz var?
‫Buradaki fikir, derleme süremizi hızlandırmasıdır çünkü eğer sadece bir değişiklik yaparsam.
‫DHCP ile oynamak için.
‫Aslında tüm derleme sürecini çalıştırmama gerek yok.
‫Tek yapmam gereken oyun DHCP'sini içeren bitleri çalıştırmak, bu yüzden ön işlemciyi sadece CP'de çalıştıracağım,
‫sonra derleyiciyi sadece oyunda çalıştıracağım ve daha önce math obj dosyasını tekrar kullanabilirim.
‫Yeniden derlememe gerek yok çünkü bu konuda hiçbir şey değişmedi.
‫Benzer şekilde, yalnızca matematik nokta CP'yi değiştirirsem, oyun obj dosyasını yeniden derlemem gerekmez, bu yüzden
‫bu daha verimli bir işlemdir ve ilk etapta bunu yapmamızın nedeni budur.
‫Bu yüzden küçük bir deney yapmamızı ve neden bir H dosyasını içeri taşıyıp bir CP dosyasını taşıdığımızı anlamaya
‫çalışmamızı istiyorum.
‫Bunun sebebi nedir?
‫Neden C++ dosyasını taşınmadan derleyemiyoruz?
‫H Yani yapacağımız deney, hash include satırını yorumlayarak çıkarmak olacak.
‫Bu nedenle, bu satırın önünde bir yorum yapmak için çift ileri eğik çizgi kullanmak, temelde önişlemcinin
‫dosyanın içeriğiyle değiştirmesi yerine önişlemci tarafından çıkarılmasını sağlayacaktır.
‫Daha sonra yeniden derleyeceğiz ve çıkan hata mesajlarına bir göz atmanızı ve bu hareketi ne için dahil ettiğimizi
‫anlamaya çalışıp çalışamayacağınızı görmek için ne yazdığını görmenizi istiyorum.
‫Videoyu duraklatın ve deneyin.
‫Tamam.
‫Tekrar hoş geldiniz.
‫Bu yüzden bu satırın başına çift ileri eğik çizgi koyalım, bu da temelde onu geçersiz
‫kılar.
‫Ve sonra bir kontrol alt f 11 yapacağız ve canlı kodlamanın çıktısına bir göz atacağız.
‫Bakın, çok ama çok erken bir dönemde bazı hatalar yaptık.
‫Ve söylediği şey, siz taşıyıcının bir sınıf veya ad alanı olmadığı ve burada başka şeyler olduğu.
‫Birincil teknoloji bileşeninin bildirilmediğini, super'in bir sınıf veya ad alanı olmadığını, get owner'ın
‫bilinmeyen bir tanımlayıcı olduğunu söylüyor.
‫Ve temelde bunun söylediği şey, burada taşıyıcıdan bahsettiniz, ancak onu hiçbir yerde tanımlamadınız,
‫hiçbir yerde beyan etmediniz.
‫Yani bilemiyorum.
‫C++ derleyicisi bunun ne olduğunu bilmediğini söylüyor.
‫İşte bu yüzden H taşıyıcısı da dahil olmak üzere hash yapıyoruz çünkü H taşıyıcısı sınıfı bildiriyor.
‫U taşıyıcının bir sınıf olduğunu ve sizden bir bileşen olarak türediğini ve bu yöntemlere sahip olduğunu vs. söylüyor.
‫O sınıf olmanın ne anlama geldiğini ilan ediyor.
‫Dolayısıyla, bu bildirim olmadan C++ derleyicisi devam edemez.
‫İşte bu yüzden bu başlık dosyasını eklememiz gerekiyor.
‫Harika bir şey.
‫Umarım şimdi C++ derlemenin ve özellikle Unreal'da C++ derlemenin içerdiği süreci biraz
‫daha iyi anlamışsınızdır.
‫Bir sonraki derste görüşmek üzere.