Bu yazımda Visual Studio ailesini C++ uygulamaları geliştirmek için kullanan yazılım geliştiricilerin bence bilmesi gereken ve işlerini oldukça
kolaylaştıracak olan “Property Sheets” mevzusunu ayıracağım. Diğer dillerde birebir aynı bir mekanizma yok ama benzeri sonuçlar elde etmeye yönelik mekanizmalar varmış (C# için).
Hakkımda sayfasında bahsettiğim gibi ağırlıklı olarak C++ yazılımları geliştirmekteyim ve bunun için de Visual Studio’yu hem iş yerinde hem de kendi projelerim için uzun bir
süredir kullanmaktayım (Belki bunun ile ilgili de bir yazı hazırlarım). İlk kullandığım Visual Studio 6.0 dan Visual Studio 2017’ye değin de farklı bazı araçlar kullansamda,
VS (Visual Studio) dan çok uzak kalamadım. Hele MS sağ olsun son bir kaç sürümdür Communitiy Edition adı altında herkesin bedava indirip, hobi amaçlı kullanabileceği bir model ortaya koydu.
Çokta iyi oldu 🙂
Bu yazımda bir VS kullanarak C++ yazılımı geliştirme deneyiminiz olduğunu kabul ediyorum. Yok ise bile, yine de faydalı olabilir.
“VS Solutions” ve “VS Projects”
Öncelikle kısaca VS’deki solution ve project kavramlarından kısaca bahsedeceğim.
VS ile herhangi bir uygulama, web sitesi, kütüphane veya benzeri bir yazılım geliştirmek için ilk yapmanız gereken şey bir proje oluşturmaktır. Proje, kendi içerisinde yazılımın
tipine veya amacına göre kaynak kodlar ve benzer şekilde derleme işleminde kullanılabilecek kalemleri içeren mantıksal bir yapı olarak düşünülebilir. Kodun yanında yine uygulama ile
ilintili konfigürasyon ayarları, resimler, dokümanlar ve benzeri kalemleri de içerir.
Aşağıda örnek proje oluşturma ekranını görebilirsiniz.
VS içerisinde kurulum ayarlarınız ışığında bir çok proje tipi bulunmaktadır. Bunlar ağırlı olarak programlama diline göre gruplandırılmaktadır. Daha sonraki yazılarımdan birinde kendinize özgü özelleşmiş VS proje şablonlarını nasıl oluşturabileceğinizi de anlatacağım.
Bu projelerden herhangi birini seçtiğiniz zaman, VS ilgili dizin içerisinde proje tipine göre bir dosya oluşturur.
C++ için .vcxproj uzantılı bu dosyanın XML tabanlı içeriğine bir göz atabilirsiniz. Bu dosya projenize ilişkin mantıksal hiyerarşi ve kalemleri tutar. Bunu el ile de değiştirebilirsiniz ama öncesinde bir kopya almayı unutmayın.
Projenin bir üstünde ise Solution durmaktadır. Herhangi bir proje VS tarafından kullanılmadan önce bir solution içerisinde bulunması gerekmekte. Solution‘lar içerisinde birden fazla proje bulunabilir. Solution’lar içerisinde projeler, bunlara ilişkin oluşturma bilgileri ve diğer bazı ayarla bulunur. Dosya sisteminde .sln uzantılı dosyalarda tutulur (ayrıca .suo uzantılı bir dosya da oluşturulur).
Aşağıda MS’in sitesinde verilen ve bu iki kavram arasındaki ilişkiyi gösteren figürü görebilirsiniz.
Property Sheets
Şimdi gelelim asıl konumuza;
VS ile yazılım geliştirirken, özellikle projelerinizin adeti arttıkça en fazla zaman harcadığınız konulardan biri de projelere ilişkin compilation, link ve benzeri ayarlar oluyor. Bunları hem idare etmek, yeni bir yere taşımak, kısaca yönetmek başlı başına bir iş olmaya başlıyor. İşte Property Sheet‘lerin kullanımı bu noktada ortaya çıkıyor.
Bu mekanizmanın temel amacı özellikle tekrarlayan/çokça kullanılan belirli ayarları gruplayarak ortak bir şekilde kullanılmasını sağlamak.
Örneğin onlarca projesi olan bir solution‘ınınız var ve üçüncü parti bir kütüphaneye ilişkin Include Path‘i eklemek istiyorsunuz. Normal şartlarda Include Path‘i tek tek bütün projelerin
derleme ayarlarına eklemeniz gerekmekte ki tahmin edeceğiniz üzere bu oldukça külfetli bir iş. Hele bir de bu dizinin değiştiğini düşünün 🙂
Bunun yerine bu ayarı içeren örneğin “Common Include” isimli bir Property Sheet hazırlayıp bütün projelerinize bunu eklerseniz, bütün projeleriniz artık bu ayarları kullanıyor olacak.
Bunun nasıl oluşturulacağına da birazdan anlatacağım.
Bu arada Property Sheet’ler ile sadece ayarlama değil aynı zamanda tanımlama da yapabilirsiniz.
Örnek Property Sheet Oluşturma
Şimdi örnek bir property sheet oluşturalım.
Genel bir kullanıma örnek olması açısından SDL isimli kütüphanenin kullanımı ile ilgili ayarlamaları içerisinde barındıran bir “Property Sheet” hazırlayacağız.
SDL bir çok platformu destekleyen ve sizi bir çok pencere yönetim işlerinden soyutlayan, aynı zamanda çizime ilişkin de bir çok servis sunan bir kütüphanedir.
Örnek projeye ilişkin kodu ekten indirebilirsiniz.
Bu kütüphane’yi herhangi bir Visual Studio projesinde kullanmak için üç önemli ayar yapmanız gerekiyor.
- Öncelikle header dosyalarına erişim için “Additional Include Directories” dizinlerini eklemelisiniz.
- Daha sonra derlenmiş olan kütüphaneleri kullanabilmek için Link ayarları altında ilgili kütüphanelerin bulunduğu dizini Link dizinleri altına eklemelisiniz.
- Son olarak ta ilgili kütüphaneyi kullanılacak olan kütüphaneler alanına eklemelisiniz.
Aslında çok ta fazla değil ama bunun gibi yüzlerce SDL projesi oluşturacağınız düşünün 🙂 Sonra SDL dizinlerinin yerinin değişebileceğini düşünün 😀
Şimdi bu ayarlar için bir Property Sheet oluşturalım.
- Öncelikle dosya menüsünden “View->Property Manager” tıklanır,
- Property Manager panelinin açıldığı görülür ve SDLSampleApplication (veya hangi projeniz için oluşturacak iseniz) seçilir,
- Sağ tıklanır ve açılan “Popup Menu” den “Add New Project Property Sheet…” tıklanır,
- İsim (“SDLPropertySheet”) ve ilgili dizin seçilir (“SDLSampleApplication/VSPropSheets”) ve “Add” tıklanır,
- Soldaki “Solution Configuration” tıklanarak açıldığında bütün projelere bu “Property Sheet” in eklendiği görülür. Sadece belirli bir “Solution Configuration”‘a (debug, release) ekleme yapmak için ilgili kalem seçilere 4. adım tekrarlanır,
- “Additional Include Directories” dizini ayarlanır,
- “Additional Library Directories” dizini ayarlanır,
- “Additional Dependencies” alanı ayarlanır ve bu ayar ile birlikte gerekli ayarlamalarımız bitiyor.
Şimdi bu Property Sheet‘i nasıl kullanacağımıza bakalım.
- Öncelikle dosya menüsünden “View->Property Manager” tıklanır,
- Property Manager panelinin açıldığı görülür ve SDLSampleAppUsesPropertySheet (veya hangi projenize ekleyecek iseniz) seçilir,
- Sağ tıklanır ve açılan “Popup Menu” den “Add Existing Property Sheet…” tıklanır,
- İlgili dizine gidilir ve ilgili “Property Sheet” seçilir (“SDLPropertySheet.props”) ve “Open” tıklanır.
Daha sonra ilgili ayarlar alanına gittiğimizde yapmış olduğumuz ayarların geldiğini görürüz.
Diğer yapabilecekleriniz ve öneriler
- Ayrıca ayarları farklı Property Sheetlere ayırabilir, ayrı ayrı veya birlikte kullanabilirsiniz.
- Ekleme sırasına göre ayarları önceliklendirebilirsiniz.
- Debug/release ve benzeri Build seçimine göre farklı property sheetler kullandırabilirsiniz.
- Çok fazla ayarı tek bir Property Sheet‘e gömmeyin.
- Özellikle 3. parti kütüphaneler için Property Sheet‘ler oluşturun.
- Dizin, sabit ve benzeri tanımlamaları ayrı bir Property Sheet‘e koyup bunu en öncelikli hale getirin.
- Release/Debug ayrımına kütüphane/exe vs göre ayarlarınızı gruplandırın.
- Property Sheet”leri oluşturduktan sonra şablon projeler oluşturarak, bu sheetleri bu projelere ekleyin. Bu sayede her yeni proje oluşturduğunuzda bunları el ile tekrar tekrar eklemek zorunda kalmazsınız.
Bir sonraki yazıda görüşmek üzere…