Die eerste ding wat ons moet doen om ons verhewe doel te bereik, is om die sagteware wat ons ontwikkel in universele, geΓ―soleerde blokke te verdeel wat eenvormig is vanuit die gebruiker se oogpunt.
In die eerste deel is so 'n standaardblok beskryf - 'n projek met 'n kopbiblioteek. Kom ons voeg nou 'n saamgestelde biblioteek by ons projek.
Om dit te doen, laat ons die implementering van die funksie uitneem myfunc in 'n aparte .cpp-lΓͺer:
Dan definieer ons die biblioteek wat saamgestel moet word (myfeature), wat sal bestaan ββuit wat in die vorige stap verkry is .cpp-lΓͺer. Die nuwe biblioteek benodig natuurlik bestaande opskrifte, en om dit te voorsien, kan en moet dit gekoppel word aan die bestaande doel mylib. Boonop is die verband tussen hulle publiek, wat beteken dat alles waaraan die teiken gekoppel sal wees myfeature, sal outomaties die vrag en teiken ontvang mylib (meer oor breimetodes).
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)
+
Vervolgens sal ons seker maak dat die nuwe biblioteek ook op die stelsel geΓ―nstalleer is:
Daar moet kennis geneem word dat vir die doel myfeature, wat betref mylib 'n alias met 'n voorvoegsel is geskep Mylib::. Dieselfde word vir beide doeleindes geskryf wanneer dit uitgevoer word vir installasie op die stelsel. Dit maak dit moontlik om eenvormig te werk met doelwitte vir enige bindende skema.
Hierna is al wat oorbly om eenheidstoetse met die nuwe biblioteek (funksie myfunc uit die titel gehaal, so nou moet jy skakel):
Opskrifte (Mylib::mylib) nou hoef jy nie afsonderlik te koppel nie, want, soos reeds genoem, word hulle outomaties saam met die biblioteek gekoppel (Mylib::myfeature).
En kom ons voeg 'n paar nuanses by om dekkingsmetings te verseker met inagneming van die nuut aangekome biblioteek:
Jy kan meer biblioteke, uitvoerbare, ens. Dit maak nie saak hoe presies hulle binne die projek met mekaar verbind is nie. Die enigste belangrike ding is watter teikens die koppelvlak van ons module is, dit wil sΓͺ, hulle steek uit.
Nou het ons standaardblokmodules, en ons kan dit oorheers: dit saamstel in 'n struktuur van enige kompleksiteit, installeer dit in 'n stelsel of koppel hulle saam binne 'n enkele samestellingstelsel.
Installasie in die stelsel
Een van die opsies vir die gebruik van die module is om ons module in die stelsel te installeer.
Daarna word dit aan enige ander projek gekoppel deur die opdrag te gebruik find_package.
find_package(Mylib 1.0 REQUIRED)
Verbinding as 'n submodule
Nog 'n opsie is om die gids met ons projek aan 'n ander projek te koppel as 'n submodule deur die opdrag te gebruik add_subdirectory.
Gebruik
Die bindmetodes verskil, maar die resultaat is dieselfde. In beide gevalle sal doelwitte beskikbaar wees in die projek deur ons module te gebruik Mylib::myfeature ΠΈ Mylib::mylib, wat byvoorbeeld soos volg gebruik kan word:
Spesifiek in ons geval, die biblioteek Mylib::myfeature moet gekoppel word wanneer dit nodig is om met die biblioteek te skakel libmyfeature. As daar genoeg opskrifte is, is dit die moeite werd om die biblioteek te gebruik Mylib::mylib.
CMake-teikens kan moeilik wees, byvoorbeeld, slegs bedoel om sekere eienskappe, afhanklikhede, ens. Terselfdertyd vind werk met hulle op dieselfde manier plaas.