Daha sonra derlenecek kütüphaneyi tanımlıyoruz (myfeature), önceki adımda elde edilenlerden oluşacaktır .cpp-dosya. Yeni kütüphanenin mevcut başlıklara ihtiyacı olduğu açıktır ve bunu sağlamak için mevcut amaca bağlanabilir ve bağlanmalıdır. mylib. Üstelik aralarındaki bağlantı halka açıktır, bu da hedefin bağlanacağı her şeyin olduğu anlamına gelir. myfeature, yükü ve hedefi otomatik olarak alacak mylib (örgü yöntemleri hakkında daha fazla bilgi).
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 108045c..0de77b8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,6 +64,17 @@ target_compile_features(mylib INTERFACE cxx_std_17)
add_library(Mylib::mylib ALIAS mylib)
+###################################################################################################
+##
+## Компилируемая библиотека
+##
+###################################################################################################
+
+add_library(myfeature src/mylib/myfeature.cpp)
+target_link_libraries(myfeature PUBLIC mylib)
+
+add_library(Mylib::myfeature ALIAS myfeature)
+
Daha sonra yeni kütüphanenin de sisteme kurulu olduğundan emin olacağız:
Şunu belirtmek gerekir ki, bu amaç için myfeature, gelince mylib öneki olan bir takma ad oluşturuldu Mylib::. Sisteme kurulum için dışa aktarırken her iki amaç için de aynı şey yazılır. Bu, herhangi bir hedef için aynı şekilde çalışmayı mümkün kılar. bağlama şeması.
Bundan sonra geriye kalan tek şey birim testlerini yeni kütüphaneye bağlamaktır (fonksiyon myfunc başlıktan çıkarıldı, bu yüzden şimdi bağlantı vermeniz gerekiyor):
Başlıklar (Mylib::mylib) artık ayrı olarak bağlanmanıza gerek yok, çünkü daha önce de belirtildiği gibi, kitaplıkla birlikte otomatik olarak bağlanırlar (Mylib::myfeature).
Yeni gelen kütüphaneyi dikkate alarak kapsam ölçümlerini sağlamak için birkaç nüans ekleyelim:
Daha fazla kitaplık, yürütülebilir dosya vb. ekleyebilirsiniz. Proje içerisinde birbirlerine tam olarak nasıl bağlandıkları önemli değildir. Önemli olan tek şey hangi hedeflerin modülümüzün arayüzü olduğu, yani öne çıktığıdır.
Artık standart blok modüllerimiz var ve onlara hakim olabiliriz: bunları herhangi bir karmaşıklıktaki yapıda birleştirebilir, bir sisteme kurabilir veya tek bir montaj sistemi içinde birbirine bağlayabiliriz.
Sisteme kurulum
Modülü kullanma seçeneklerinden biri modülümüzü sisteme kurmaktır.
Bundan sonra komutu kullanarak başka bir projeye bağlanır. find_package.
find_package(Mylib 1.0 REQUIRED)
Alt modül olarak bağlantı
Diğer bir seçenek ise projemizin bulunduğu klasörü aşağıdaki komutu kullanarak başka bir projeye alt modül olarak bağlamaktır. add_subdirectory.
kullanımı
Bağlama yöntemleri farklıdır ancak sonuç aynıdır. Her iki durumda da hedefler modülümüzü kullanarak projede mevcut olacaktır. Mylib::myfeature и Mylib::mylibörneğin şu şekilde kullanılabilir:
Özellikle bizim durumumuzda kütüphane Mylib::myfeature Kütüphaneye bağlanmak gerektiğinde bağlanmak gerekir libmyfeature. Yeterli başlık varsa, kütüphaneyi kullanmaya değer Mylib::mylib.
CMake hedefleri yanıltıcı olabilir; örneğin yalnızca bazı özellikleri, bağımlılıkları vb. iletmeyi amaçlayabilir. Aynı zamanda onlarla çalışmak da aynı şekilde gerçekleşir.