L-ewwel ħaġa li rridu nagħmlu biex nilħqu l-għan għoli tagħna hija li naqsmu s-softwer li niżviluppaw fi blokki universali u iżolati li huma uniformi mill-perspettiva tal-utent.
Fl-ewwel parti, blokka standard bħal din ġiet deskritta - proġett b'librerija header. Issa ejja nżidu librerija kkumpilata mal-proġett tagħna.
Biex tagħmel dan, ejja noħroġ l-implimentazzjoni tal-funzjoni myfunc f'parti separata .cpp-file:
Imbagħad niddefinixxu l-librerija li trid tiġi kkumpilata (myfeature), li se jikkonsisti minn dak li nkiseb fil-pass preċedenti .cpp-fajl. Il-librerija l-ġdida ovvjament teħtieġ headers eżistenti, u sabiex tipprovdi dan, tista 'u għandha tkun marbuta mal-iskop eżistenti mylib. Barra minn hekk, il-konnessjoni bejniethom hija pubblika, li jfisser li dak kollu li miegħu se tkun konnessa l-mira myfeature, se tirċievi awtomatikament it-tagħbija u l-mira mylib (aktar dwar metodi tan-knitting).
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)
+
Sussegwentement, niżguraw li l-librerija l-ġdida hija installata wkoll fuq is-sistema:
Għandu jiġi nnutat li għall-iskop myfeature, kif għal mylib inħoloq alias bi prefiss Mylib::. L-istess jinkiteb għaż-żewġ għanijiet meta jiġu esportati għall-installazzjoni fuq is-sistema. Dan jagħmilha possibbli li taħdem b'mod uniformi ma 'għanijiet għal kwalunkwe skema vinkolanti.
Wara dan, kulma jibqa 'huwa li tgħaqqad it-testijiet tal-unità mal-librerija l-ġdida (funzjoni myfunc meħuda mit-titlu, allura issa trid tikkollega):
Intestaturi (Mylib::mylib) issa m'għandekx bżonn tikkonnettja separatament, għaliex, kif diġà ssemma, huma awtomatikament konnessi flimkien mal-librerija (Mylib::myfeature).
U ejja nżidu ftit sfumaturi biex niżguraw kejl tal-kopertura b'kont meħud tal-librerija li għadha kif waslet:
Tista 'żżid aktar libreriji, eżekutibbli, eċċ. Ma jimpurtax kemm huma eżattament konnessi ma 'xulxin fi ħdan il-proġett. L-unika ħaġa importanti hija liema miri huma l-interface tal-modulu tagħna, jiġifieri, joħorġu.
Issa għandna moduli ta 'blokki standard, u nistgħu niddominawhom: ikkomponihom fi struttura ta' kwalunkwe kumplessità, ninstallahom f'sistema jew torbothom flimkien f'sistema ta 'assemblaġġ waħda.
Installazzjoni fis-sistema
Waħda mill-għażliet għall-użu tal-modulu hija li tinstalla l-modulu tagħna fis-sistema.
Wara dan, huwa konness ma 'kwalunkwe proġett ieħor bl-użu tal-kmand find_package.
find_package(Mylib 1.0 REQUIRED)
Konnessjoni bħala submodulu
Għażla oħra hija li tikkonnettja l-folder mal-proġett tagħna ma 'proġett ieħor bħala submodulu bl-użu tal-kmand add_subdirectory.
Użu
Il-metodi li jorbtu huma differenti, iżda r-riżultat huwa l-istess. Fiż-żewġ każijiet, l-għanijiet se jkunu disponibbli fil-proġett bl-użu tal-modulu tagħna Mylib::myfeature и Mylib::mylib, li jistgħu jintużaw, pereżempju, bħal dan:
Speċifikament fil-każ tagħna, il-librerija Mylib::myfeature jeħtieġ li jiġu konnessi meta jkun meħtieġ li jgħaqqdu mal-librerija libmyfeature. Jekk hemm biżżejjed headers, allura ta 'min juża l-librerija Mylib::mylib.
Il-miri CMake jistgħu jkunu delikati, pereżempju, maħsuba biss biex jgħaddu xi proprjetajiet, dipendenzi, eċċ. Fl-istess ħin, ix-xogħol magħhom iseħħ bl-istess mod.