Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE
Hedefleri tanımlayın, kütüphaneleri bağlayın ve PUBLIC, PRIVATE, INTERFACE görünürlüğünü doğru kullanın
Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Hedefler Derleme Birimidir
Modern CMake, hedefler etrafında şekillenir: çalıştırılabilir dosyalar, kitaplıklar veya yalnızca arayüz kümeleri. Özellikler hedeflere bağlanır ve bağlama yoluyla aktarılır.
Hedef Ekleme
add_executable, add_library veya add_library(... INTERFACE) kullanın.
add_executable(myapp src/main.cpp)
add_library(mylib STATIC src/lib.cpp)
add_library(headers INTERFACE)target_link_libraries
Bir hedefi kitaplıklara bağlayın. Üçüncü bağımsız değişken görünürlüğü denetler.
target_link_libraries(myapp PRIVATE mylib)PUBLIC PRIVATE INTERFACE Görünürlüğü
Üç görünürlük düzeyi vardır; bunlar bağımlılıkların bu hedefi kullananlara aktarılıp aktarılmayacağını denetler:
- PRIVATE — bu hedefi oluşturmak için kullanılır; dışarıya açılmaz
- INTERFACE — kullananlar tarafından kullanılır; bu hedef tarafından kullanılmaz
- PUBLIC — her ikisi
Aktarımı Görselleştirme
mylib, fmt kitaplığına PUBLIC olarak bağlanırsa mylib ile bağlanan tüm hedefler fmt kitaplığının ekleme dizinlerini de alır. PRIVATE, kullananların fmt kitaplığını göremeyeceği anlamına gelir.
target_include_directories
Ekleme dizinlerini hedef başına ayarlayın. Kullananların #include edeceği başlık dosyaları için PUBLIC, iç başlık dosyaları için PRIVATE kullanın.
target_include_directories(mylib
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)target_compile_definitions
Hedef için ön işlemci makrolarını ayarlayın.
target_compile_definitions(mylib PUBLIC MYLIB_VERSION_MAJOR=1)target_compile_features
Belirli dil özelliklerini (örneğin bir C++ standardını) isteyin.
target_compile_features(mylib PUBLIC cxx_std_20)Arayüz Kitaplıkları
Bir INTERFACE kitaplığının derlenmiş çıktısı yoktur. Kullananların devralması gereken derleme seçeneklerini, başlık dosyalarını veya bağlamaları bir araya getirmek için kullanın.
add_library(strict_warnings INTERFACE)
target_compile_options(strict_warnings INTERFACE -Wall -Wextra)
# now any target can opt in
target_link_libraries(myapp PRIVATE strict_warnings)Yalnızca Başlıklardan Oluşan Kitaplıklar
Yalnızca başlıklardan oluşan kitaplıklar için bir INTERFACE kitaplığı bildirin ve ekleme dizinini INTERFACE olarak ayarlayın.
Takma Adlar
Daha anlaşılır bağlama komutları için ad alanlı takma adlar oluşturun.
add_library(MyProject::mylib ALIAS mylib)
target_link_libraries(consumer PRIVATE MyProject::mylib)Bağlama Sırası
CMake genellikle bağlama sırasını doğru şekilde çözer. Zor, döngüsel durumlarda --start-group bağlayıcı seçeneğini kullanın veya kitaplık yapınızı yeniden düzenleyin.
Yaygın Hata: Global include_directories
Global include_directories komutundan kaçının. Başlık dosyalarının yalnızca belirli hedeflere bağlanması için target_include_directories kullanın.
Kısa Denetim
mylib ile bağlanan bir hedef için target_link_libraries(mylib PUBLIC fmt) ne anlama gelir?
Özet
Modern CMake, hedefleri iş birimi olarak kullanır. Özellikleri target_* komutlarıyla ayarlayın ve özelliklerin kullananlara nasıl aktarılacağını denetlemek için PUBLIC/PRIVATE/INTERFACE kullanın.
Sıkça Sorulan Sorular
“Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE” dersi ücretsiz mi?
Evet — “Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE” dersinde ne öğreneceğim?
Hedefleri tanımlayın, kütüphaneleri bağlayın ve PUBLIC, PRIVATE, INTERFACE görünürlüğünü doğru kullanın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- CMake Proje Düzeni ve CMakeLists.txt
- Hedefler, Bağlama ve Görünürlük: PUBLIC, PRIVATE
- Bağımlılıklar İçin vcpkg ve Conan Kullanımı
- IDE Dosyaları Oluşturma ve Platformlar Arası Derlemeler