ثم نحدد المكتبة التي سيتم تجميعها (myfeature)، والتي ستتكون مما تم الحصول عليه في الخطوة السابقة .cpp-ملف. من الواضح أن المكتبة الجديدة تتطلب رؤوسًا موجودة، ومن أجل توفير ذلك، يمكن ويجب ربطها بالغرض الحالي mylib. علاوة على ذلك فإن الاتصال بينهما عام، مما يعني أن كل ما سيرتبط به الهدف myfeature، سوف يتلقى التحميل والهدف تلقائيًا mylib (المزيد عن طرق الحياكة).
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)
+
بعد ذلك، سنتأكد من تثبيت المكتبة الجديدة أيضًا على النظام:
وتجدر الإشارة إلى أن لهذا الغرض myfeature، أما بالنسبة لل mylib تم إنشاء اسم مستعار ببادئة Mylib::. يتم كتابة الشيء نفسه لكلا الغرضين عند تصديرهما للتثبيت على النظام. هذا يجعل من الممكن العمل بشكل موحد مع الأهداف لأي شخص مخطط ملزم.
بعد ذلك، كل ما تبقى هو ربط اختبارات الوحدة بالمكتبة الجديدة (function myfunc تم حذفه من العنوان، لذا فأنت بحاجة الآن إلى الارتباط):
يمكنك إضافة المزيد من المكتبات والملفات التنفيذية وما إلى ذلك. لا يهم مدى ارتباطهم ببعضهم البعض داخل المشروع. الشيء المهم الوحيد هو تحديد الأهداف التي تمثل واجهة وحدتنا، أي أنها تظل بارزة.
وبعد ذلك يتم توصيله بأي مشروع آخر باستخدام الأمر find_package.
find_package(Mylib 1.0 REQUIRED)
الاتصال كوحدة فرعية
هناك خيار آخر وهو توصيل المجلد بمشروعنا بمشروع آخر كوحدة فرعية باستخدام الأمر add_subdirectory.
استخدام
تختلف طرق الربط لكن النتيجة واحدة. في كلتا الحالتين، ستكون الأهداف متاحة في المشروع باستخدام وحدتنا Mylib::myfeature и Mylib::mylib، والتي يمكن استخدامها، على سبيل المثال، مثل هذا:
وعلى وجه التحديد في حالتنا، المكتبة Mylib::myfeature يجب أن تكون متصلاً عندما يكون من الضروري الارتباط بالمكتبة libmyfeature. إذا كان هناك ما يكفي من الرؤوس، فمن المفيد استخدام المكتبة Mylib::mylib.
يمكن أن تكون أهداف CMake صعبة، على سبيل المثال، تهدف فقط إلى إعادة توجيه بعض الخصائص والتبعيات وما إلى ذلك. وفي الوقت نفسه، يتم العمل معهم بنفس الطريقة.