Prva stvar koju trebamo učiniti kako bismo postigli naš uzvišeni cilj je podijeliti softver koji razvijamo u univerzalne, izolirane blokove koji su jedinstveni s korisnikove točke gledišta.
U prvom dijelu opisan je takav standardni blok - projekt s bibliotekom zaglavlja. Dodajmo sada kompiliranu biblioteku našem projektu.
Da bismo to učinili, izvadimo implementaciju funkcije myfunc u zasebnom .cpp-datoteka:
Zatim definiramo biblioteku koju ćemo sastaviti (myfeature), koji će se sastojati od onoga što je dobiveno u prethodnom koraku .cpp-datoteka. Nova biblioteka očito zahtijeva postojeća zaglavlja, a kako bi to omogućila, može i treba biti vezana za postojeću svrhu mylib. Štoviše, veza između njih je javna, što znači da je sve na što će meta biti povezano myfeature, automatski će primiti opterećenje i cilj mylib (više o metodama pletenja).
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)
+
Zatim ćemo provjeriti je li nova biblioteka također instalirana na sustavu:
Valja napomenuti da u svrhu myfeature, Što se tiče mylib stvoren je alias s prefiksom Mylib::. Isto je napisano za obje namjene prilikom izvoza za instalaciju na sustav. To omogućuje ujednačen rad s ciljevima za sve shema vezanja.
Nakon toga ostaje samo povezati jedinične testove s novom bibliotekom (funkcija myfunc izbačeno iz naslova, pa sad treba link):
Naslovi (Mylib::mylib) sada se ne morate spajati odvojeno, jer, kao što je već spomenuto, automatski se povezuju zajedno s bibliotekom (Mylib::myfeature).
I dodajmo nekoliko nijansi kako bismo osigurali mjerenja pokrivenosti uzimajući u obzir novopristiglu knjižnicu:
Možete dodati više biblioteka, izvršnih datoteka itd. Nije bitno kako su točno međusobno povezani unutar projekta. Važno je samo koje mete su sučelje našeg modula, odnosno strše.
Sada imamo standardne blok module i možemo dominirati njima: komponirati ih u strukturu bilo koje složenosti, instalirati ih u sustav ili ih povezati u jedan montažni sustav.
Ugradnja u sustav
Jedna od mogućnosti korištenja modula je ugradnja našeg modula u sustav.
Nakon toga se pomoću naredbe povezuje s bilo kojim drugim projektom find_package.
find_package(Mylib 1.0 REQUIRED)
Veza kao podmodul
Druga mogućnost je povezati mapu s našim projektom s drugim projektom kao podmodul pomoću naredbe add_subdirectory.
Koristiti
Metode vezivanja su različite, ali rezultat je isti. U oba slučaja, ciljevi će biti dostupni u projektu pomoću našeg modula Mylib::myfeature и Mylib::mylib, koji se može koristiti, na primjer, ovako:
Konkretno u našem slučaju, knjižnica Mylib::myfeature potrebno povezati kada je potrebno povezati se s knjižnicom libmyfeature. Ako ima dovoljno zaglavlja, onda je vrijedno koristiti biblioteku Mylib::mylib.
CMake ciljevi mogu biti nezgodni, na primjer, namijenjeni samo prosljeđivanju nekih svojstava, ovisnosti itd. Istodobno, rad s njima odvija se na isti način.