Esimene asi, mida peame oma kõrge eesmärgi saavutamiseks tegema, on jagada meie arendatav tarkvara universaalseteks, isoleeritud plokkideks, mis on kasutaja seisukohast ühtsed.
Esimeses osas kirjeldati sellist standardplokki - päise raamatukoguga projekti. Nüüd lisame oma projektile koostatud raamatukogu.
Selleks võtame välja funktsiooni rakendamise myfunc eraldi .cpp- fail:
Seejärel määratleme kompileeritava raamatukogu (myfeature), mis koosneb eelmises etapis saadust .cpp- fail. Ilmselgelt vajab uus teek olemasolevaid päiseid ja selle pakkumiseks saab ja peaks olema seotud olemasoleva eesmärgiga mylib. Pealegi on nendevaheline seos avalik, mis tähendab, et kõik, millega sihtmärk ühendatakse myfeature, saab automaatselt koormuse ja sihtmärgi mylib (rohkem kudumismeetodite kohta).
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)
+
Järgmisena veendume, et uus teek oleks ka süsteemi installitud:
Tuleb märkida, et selleks myfeature, nagu mylib loodi eesliitega alias Mylib::. Sama on kirjutatud mõlema eesmärgi kohta, kui neid süsteemi installimiseks eksportida. See võimaldab töötada ühetaoliselt eesmärkidega mis tahes jaoks siduv skeem.
Pärast seda jääb üle vaid linkida ühikutestid uue teegiga (funktsioon myfunc pealkirjast välja võetud, nii et nüüd peate linkima):
Pealkirjad (Mylib::mylib) nüüd ei pea te eraldi ühendust looma, sest nagu juba mainitud, ühendatakse need automaatselt koos teegiga (Mylib::myfeature).
Ja lisame paar nüanssi, et tagada katvuse mõõtmised, võttes arvesse äsja saabunud raamatukogu:
Saate lisada rohkem teeke, käivitatavaid faile jne. Pole tähtis, kui täpselt need projekti raames omavahel seotud on. Ainus oluline on see, millised sihtmärgid on meie mooduli liides, see tähendab, et need paistavad välja.
Nüüd on meil standardsed plokkmoodulid ja me saame nende üle domineerida: koostada need mis tahes keerukusega struktuuriks, paigaldada need süsteemi või siduda need ühte koostesüsteemi.
Paigaldamine süsteemi
Üks mooduli kasutamise võimalustest on meie mooduli paigaldamine süsteemi.
Pärast seda ühendatakse see käsu abil mis tahes muu projektiga find_package.
find_package(Mylib 1.0 REQUIRED)
Ühendus alammoodulina
Teine võimalus on ühendada meie projektiga kaust käsu abil alammoodulina teise projektiga add_subdirectory.
Kasutama
Köitmismeetodid on erinevad, kuid tulemus on sama. Mõlemal juhul on eesmärgid meie mooduli abil projektis saadaval Mylib::myfeature и Mylib::mylib, mida saab kasutada näiteks järgmiselt:
Täpsemalt meie puhul raamatukogu Mylib::myfeature tuleb ühendada, kui on vaja raamatukoguga linkida libmyfeature. Kui päiseid on piisavalt, siis tasub raamatukogu kasutada Mylib::mylib.
CMake'i sihtmärgid võivad olla keerulised, näiteks mõeldud ainult teatud atribuutide, sõltuvuste jne edastamiseks. Samal ajal toimub nendega töötamine samamoodi.