La unua afero, kiun ni devas fari por atingi nian altan celon, estas dividi la programaron, kiun ni evoluigas en universalajn, izolitajn blokojn, kiuj estas unuformaj el la vidpunkto de la uzanto.
En la unua parto estis priskribita tia norma bloko - projekto kun kapa biblioteko. Nun ni aldonu kompilitan bibliotekon al nia projekto.
Por fari tion, ni elprenu la efektivigon de la funkcio myfunc en aparta .cpp-dosiero:
Tiam ni difinas la kompilotan bibliotekon (myfeature), kiu konsistos el tio, kio estis akirita en la antaŭa paŝo .cpp-dosiero. La nova biblioteko evidente postulas ekzistantajn kapliniojn, kaj por provizi tion, ĝi povas kaj devas esti ligita al la ekzistanta celo mylib. Krome, la ligo inter ili estas publika, kio signifas, ke ĉio al kio la celo estos konektita myfeature, aŭtomate ricevos la ŝarĝon kaj celon mylib (pli pri trikaj metodoj).
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)
+
Poste, ni certigos, ke la nova biblioteko ankaŭ estas instalita en la sistemo:
Oni notu, ke tiucele myfeature, kiel por mylib kaŝnomo kun prefikso estis kreita Mylib::. La sama estas skribita por ambaŭ celoj kiam ili eksportas por instalado en la sistemo. Ĉi tio ebligas labori unuforme kun celoj por iu ajn liga skemo.
Post tio, restas nur ligi unutestojn kun la nova biblioteko (funkcio myfunc forprenita el la titolo, do nun vi devas ligi):
Titoloj (Mylib::mylib) nun vi ne bezonas aparte konektiĝi, ĉar, kiel jam menciite, ili estas aŭtomate konektitaj kune kun la biblioteko (Mylib::myfeature).
Kaj ni aldonu kelkajn nuancojn por certigi kovrajn mezuradojn konsiderante la ĵusalvenitan bibliotekon:
Vi povas aldoni pli da bibliotekoj, ruleblaj, ktp. Ne gravas kiom precize ili estas konektitaj unu al la alia ene de la projekto. La sola grava afero estas, kiuj celoj estas la interfaco de nia modulo, tio estas, ili elstaras.
Nun ni havas normajn blokmodulojn, kaj ni povas regi ilin: kunmeti ilin en strukturon de ajna komplekseco, instalante ilin en sistemon aŭ kunligante ilin ene de ununura ensambla sistemo.
Instalado en la sistemon
Unu el la ebloj por uzi la modulon estas instali nian modulon en la sistemon.
Post tio, ĝi estas konektita al iu ajn alia projekto uzante la komandon find_package.
find_package(Mylib 1.0 REQUIRED)
Konekto kiel submodulo
Alia eblo estas konekti la dosierujon kun nia projekto al alia projekto kiel submodulo uzante la komandon add_subdirectory.
Uzo
La ligaj metodoj estas malsamaj, sed la rezulto estas la sama. En ambaŭ kazoj, celoj estos disponeblaj en la projekto uzante nian modulon Mylib::myfeature и Mylib::mylib, kiu povas esti uzata, ekzemple, jene:
Specife en nia kazo, la biblioteko Mylib::myfeature devas esti konektita kiam necesas ligi kun la biblioteko libmyfeature. Se estas sufiĉe da kaplinioj, tiam indas uzi la bibliotekon Mylib::mylib.
CMake-celoj povas esti malfacilaj, ekzemple, intencitaj nur por plusendi iujn ecojn, dependecojn, ktp. Samtempe, labori kun ili okazas en la sama maniero.