Jambo la kwanza tunalohitaji kufanya ili kufikia lengo letu kuu ni kugawanya programu tunayotengeneza katika vizuizi vya ulimwengu wote, vilivyotengwa ambavyo vinafanana kutoka kwa maoni ya mtumiaji.
Katika sehemu ya kwanza, kizuizi cha kawaida kama hicho kilielezewa - mradi ulio na maktaba ya kichwa. Sasa hebu tuongeze maktaba iliyokusanywa kwenye mradi wetu.
Ili kufanya hivyo, hebu tuchukue utekelezaji wa kazi myfunc katika tofauti .cpp-faili:
Kisha tunafafanua maktaba ya kukusanywa (myfeature), ambayo itajumuisha kile kilichopatikana katika hatua ya awali .cpp-faili. Maktaba mpya ni wazi inahitaji vichwa vilivyopo, na ili kutoa hii, inaweza na inapaswa kushikamana na madhumuni yaliyopo. mylib. Aidha, uhusiano kati yao ni wa umma, ambayo ina maana kwamba kila kitu ambacho lengo litaunganishwa myfeature, itapokea mzigo na lengo moja kwa moja mylib (zaidi kuhusu mbinu za kuunganisha).
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)
+
Ifuatayo, tutahakikisha kuwa maktaba mpya pia imewekwa kwenye mfumo:
Ikumbukwe kwamba kwa madhumuni myfeature, kama kwa mylib lakabu yenye kiambishi awali iliundwa Mylib::. Vile vile vimeandikwa kwa madhumuni yote mawili wakati wa kuwasafirisha kwa ajili ya ufungaji kwenye mfumo. Hii inafanya uwezekano wa kufanya kazi kwa usawa na malengo kwa yoyote mpango wa kufunga.
Baada ya hayo, kilichobaki ni kuunganisha majaribio ya kitengo na maktaba mpya (function myfunc imetolewa nje ya kichwa, kwa hivyo sasa unahitaji kuunganisha):
Vichwa (Mylib::mylib) sasa hauitaji kuunganishwa kando, kwa sababu, kama ilivyotajwa tayari, zimeunganishwa kiotomatiki pamoja na maktaba (Mylib::myfeature).
Na wacha tuongeze nuances kadhaa ili kuhakikisha vipimo vya chanjo kwa kuzingatia maktaba mpya iliyofika:
Unaweza kuongeza maktaba zaidi, zinazoweza kutekelezwa, n.k. Haijalishi ni jinsi gani wameunganishwa kwa kila mmoja ndani ya mradi. Jambo muhimu pekee ni malengo gani ni kiolesura cha moduli yetu, yaani, yanashikamana.
Sasa tuna moduli za kawaida za kuzuia, na tunaweza kuzitawala: kuzitunga katika muundo wa utata wowote, kuziweka kwenye mfumo au kuziunganisha pamoja ndani ya mfumo mmoja wa mkusanyiko.
Ufungaji kwenye mfumo
Moja ya chaguzi za kutumia moduli ni kusakinisha moduli yetu kwenye mfumo.
Baada ya hapo, imeunganishwa na mradi mwingine wowote kwa kutumia amri find_package.
find_package(Mylib 1.0 REQUIRED)
Muunganisho kama moduli ndogo
Chaguo jingine ni kuunganisha folda na mradi wetu kwa mradi mwingine kama moduli ndogo kwa kutumia amri add_subdirectory.
Matumizi ya
Njia za kufunga ni tofauti, lakini matokeo ni sawa. Katika visa vyote viwili, malengo yatapatikana katika mradi kwa kutumia moduli yetu Mylib::myfeature ΠΈ Mylib::mylib, ambayo inaweza kutumika, kwa mfano, kama hii:
Hasa katika kesi yetu, maktaba Mylib::myfeature haja ya kuunganishwa wakati ni muhimu kuunganishwa na maktaba libmyfeature. Ikiwa kuna vichwa vya kutosha, basi inafaa kutumia maktaba Mylib::mylib.
Malengo ya CMake yanaweza kuwa gumu, kwa mfano, yaliyokusudiwa tu kusambaza mali fulani, tegemezi, n.k. Wakati huo huo, kufanya kazi nao hutokea kwa njia ile ile.