اپنے بلند مقصد کو حاصل کرنے کے لیے ہمیں سب سے پہلے جو کام کرنے کی ضرورت ہے وہ یہ ہے کہ ہم جو سافٹ ویئر تیار کرتے ہیں اسے آفاقی، الگ تھلگ بلاکس میں تقسیم کرنا ہے جو صارف کے نقطہ نظر سے یکساں ہیں۔
پہلے حصے میں، اس طرح کے ایک معیاری بلاک کو بیان کیا گیا تھا - ایک ہیڈر لائبریری کے ساتھ ایک پروجیکٹ۔ اب ہم اپنے پروجیکٹ میں ایک مرتب شدہ لائبریری شامل کرتے ہیں۔
ایسا کرنے کے لیے، آئیے فنکشن کا نفاذ کرتے ہیں۔ myfunc ایک علیحدہ میں .cppفائل:
پھر ہم مرتب کی جانے والی لائبریری کی وضاحت کرتے ہیں (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::. سسٹم پر انسٹالیشن کے لیے برآمد کرتے وقت دونوں مقاصد کے لیے ایک ہی لکھا جاتا ہے۔ اس سے کسی کے لیے اہداف کے ساتھ یکساں طور پر کام کرنا ممکن ہو جاتا ہے۔ پابند سکیم.
اس کے بعد، جو باقی رہ جاتا ہے وہ یونٹ ٹیسٹوں کو نئی لائبریری (فنکشن myfunc عنوان سے نکالا گیا، لہذا اب آپ کو لنک کرنے کی ضرورت ہے):
عنوانات (Mylib::mylib) اب آپ کو الگ سے جڑنے کی ضرورت نہیں ہے، کیونکہ جیسا کہ پہلے ہی بتایا گیا ہے، وہ خود بخود لائبریری کے ساتھ جڑ جاتے ہیں (Mylib::myfeature).
اور آئیے نئی آنے والی لائبریری کو مدنظر رکھتے ہوئے کوریج کی پیمائش کو یقینی بنانے کے لیے چند باریکیاں شامل کریں:
آپ مزید لائبریریاں، ایگزیکیوٹیبل وغیرہ شامل کر سکتے ہیں۔ اس سے کوئی فرق نہیں پڑتا کہ وہ پروجیکٹ کے اندر ایک دوسرے سے کس طرح جڑے ہوئے ہیں۔ صرف اہم چیز یہ ہے کہ کون سے اہداف ہمارے ماڈیول کا انٹرفیس ہیں، یعنی وہ باہر رہتے ہیں۔
اب ہمارے پاس معیاری بلاک ماڈیولز ہیں، اور ہم ان پر غلبہ حاصل کر سکتے ہیں: انہیں کسی بھی پیچیدگی کے ڈھانچے میں مرتب کریں، انہیں کسی سسٹم میں انسٹال کریں یا انہیں ایک ہی اسمبلی سسٹم میں آپس میں جوڑیں۔
سسٹم میں انسٹالیشن
ماڈیول استعمال کرنے کے اختیارات میں سے ایک ہمارے ماڈیول کو سسٹم میں انسٹال کرنا ہے۔
اس کے بعد، یہ کمانڈ کا استعمال کرتے ہوئے کسی دوسرے پروجیکٹ سے منسلک ہوتا ہے۔ find_package.
find_package(Mylib 1.0 REQUIRED)
ذیلی ماڈل کے طور پر کنکشن
دوسرا آپشن یہ ہے کہ فولڈر کو ہمارے پروجیکٹ کے ساتھ کمانڈ کا استعمال کرتے ہوئے ذیلی ماڈل کے طور پر دوسرے پروجیکٹ سے جوڑیں۔ add_subdirectory.
استعمال کریں
پابند کرنے کے طریقے مختلف ہیں، لیکن نتیجہ ایک ہی ہے۔ دونوں صورتوں میں، ہمارے ماڈیول کا استعمال کرتے ہوئے پروجیکٹ میں اہداف دستیاب ہوں گے۔ Mylib::myfeature и Mylib::mylib، جو استعمال کیا جا سکتا ہے، مثال کے طور پر، اس طرح:
خاص طور پر ہمارے معاملے میں، لائبریری Mylib::myfeature جب لائبریری کے ساتھ لنک کرنا ضروری ہو تو منسلک ہونے کی ضرورت ہے۔ libmyfeature. اگر کافی ہیڈر ہیں، تو یہ لائبریری کا استعمال کرنے کے قابل ہے Mylib::mylib.
CMake کے اہداف مشکل ہو سکتے ہیں، مثال کے طور پر، صرف کچھ پراپرٹیز، انحصار وغیرہ کو آگے بڑھانا ہے۔ ایک ہی وقت میں، ان کے ساتھ کام کرنا اسی طرح ہوتا ہے.