Prvá vec, ktorú musíme urobiť, aby sme dosiahli náš vznešený cieľ, je rozdeliť softvér, ktorý vyvíjame, do univerzálnych, izolovaných blokov, ktoré sú jednotné z pohľadu používateľa.
V prvej časti bol popísaný taký štandardný blok - projekt s knižnicou hlavičiek. Teraz do nášho projektu pridáme skompilovanú knižnicu.
Aby sme to dosiahli, vyberme implementáciu funkcie myfunc v samostatnom .cpp-súbor:
Potom definujeme knižnicu, ktorá sa má skompilovať (myfeature), ktorý bude pozostávať z toho, čo bolo získané v predchádzajúcom kroku .cpp- súbor. Nová knižnica samozrejme vyžaduje existujúce hlavičky, a aby to mohla poskytnúť, môže a mala by byť prepojená s existujúcim účelom mylib. Spojenie medzi nimi je navyše verejné, čo znamená, že všetko, s čím bude spojený cieľ myfeature, automaticky prijme zaťaženie a cieľ mylib (viac o metódach pletenia).
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)
+
Ďalej sa ubezpečíme, že nová knižnica je nainštalovaná aj v systéme:
Treba poznamenať, že za účelom myfeature, ako pre mylib bol vytvorený alias s predponou Mylib::. To isté sa zapisuje pre oba účely pri ich exporte na inštaláciu do systému. To umožňuje jednotne pracovať s cieľmi pre ľubovoľné záväzná schéma.
Potom už zostáva len prepojiť testy jednotiek s novou knižnicou (funkcia myfunc vyňaté z názvu, takže teraz musíte prepojiť):
nadpisy (Mylib::mylib) teraz sa už nemusíte pripájať samostatne, pretože, ako už bolo spomenuté, sú automaticky spojené spolu s knižnicou (Mylib::myfeature).
A pridajme pár nuancií, aby sme zabezpečili merania pokrytia s prihliadnutím na novoprijatú knižnicu:
Môžete pridať ďalšie knižnice, spustiteľné súbory atď. Nezáleží na tom, ako presne sú navzájom prepojené v rámci projektu. Dôležité je len to, ktoré ciele sú rozhraním nášho modulu, teda vyčnievajú.
Teraz máme štandardné blokové moduly a môžeme im dominovať: poskladať ich do štruktúry akejkoľvek zložitosti, nainštalovať ich do systému alebo ich prepojiť v rámci jedného montážneho systému.
Inštalácia do systému
Jednou z možností využitia modulu je inštalácia nášho modulu do systému.
Potom sa pomocou príkazu pripojí k akémukoľvek inému projektu find_package.
find_package(Mylib 1.0 REQUIRED)
Pripojenie ako submodul
Ďalšou možnosťou je prepojiť zložku s naším projektom s iným projektom ako submodul pomocou príkazu add_subdirectory.
Použitie
Spôsoby viazania sú rôzne, ale výsledok je rovnaký. V oboch prípadoch budú ciele dostupné v projekte pomocou nášho modulu Mylib::myfeature и Mylib::mylib, ktorý sa dá použiť napríklad takto:
Konkrétne v našom prípade knižnica Mylib::myfeature je potrebné pripojiť, keď je potrebné prepojenie s knižnicou libmyfeature. Ak je dostatok hlavičiek, potom sa oplatí použiť knižnicu Mylib::mylib.
Ciele CMake môžu byť zložité, napríklad určené len na preposielanie niektorých vlastností, závislostí atď. Zároveň sa práca s nimi vyskytuje rovnakým spôsobom.