Det første vi må gjøre for å nå vårt høye mål er å dele opp programvaren vi utvikler i universelle, isolerte blokker som er enhetlige fra brukerens synspunkt.
I den første delen ble en slik standardblokk beskrevet - et prosjekt med et overskriftsbibliotek. La oss nå legge til et kompilert bibliotek til prosjektet vårt.
For å gjøre dette, la oss ta ut implementeringen av funksjonen myfunc i en separat .cpp-fil:
Deretter definerer vi biblioteket som skal kompileres (myfeature), som vil bestå av det som ble oppnådd i forrige trinn .cpp-fil. Det nye biblioteket krever åpenbart eksisterende overskrifter, og for å kunne tilby dette kan og bør det knyttes til det eksisterende formålet mylib. Dessuten er forbindelsen mellom dem offentlig, noe som betyr at alt som målet vil være koblet til myfeature, vil automatisk motta lasten og målet mylib (mer om strikkemetoder).
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)
+
Deretter skal vi sørge for at det nye biblioteket også er installert på systemet:
Det skal bemerkes at for formålet myfeature, når det gjelder mylib et alias med et prefiks ble opprettet Mylib::. Det samme skrives for begge formål når de eksporteres for installasjon på systemet. Dette gjør det mulig å jobbe enhetlig med mål for evt bindende ordning.
Etter dette gjenstår det bare å koble enhetstester med det nye biblioteket (funksjon myfunc tatt ut av tittelen, så nå må du linke):
Overskrifter (Mylib::mylib) nå trenger du ikke koble til separat, fordi, som allerede nevnt, kobles de automatisk sammen med biblioteket (Mylib::myfeature).
Og la oss legge til et par nyanser for å sikre dekningsmålinger som tar hensyn til det nylig ankomne biblioteket:
Du kan legge til flere biblioteker, kjørbare filer osv. Det spiller ingen rolle hvor nøyaktig de er knyttet til hverandre innenfor prosjektet. Det eneste viktige er hvilke mål som er grensesnittet til modulen vår, det vil si at de stikker seg ut.
Nå har vi standard blokkmoduler, og vi kan dominere dem: komponere dem til en struktur av enhver kompleksitet, installere dem i et system eller koble dem sammen i et enkelt monteringssystem.
Installasjon i systemet
Et av alternativene for å bruke modulen er å installere vår modul i systemet.
Etter det kobles den til et hvilket som helst annet prosjekt ved å bruke kommandoen find_package.
find_package(Mylib 1.0 REQUIRED)
Tilkobling som en undermodul
Et annet alternativ er å koble mappen med prosjektet vårt til et annet prosjekt som en undermodul ved å bruke kommandoen add_subdirectory.
Bruk
Bindingsmetodene er forskjellige, men resultatet er det samme. I begge tilfeller vil mål være tilgjengelige i prosjektet ved hjelp av vår modul Mylib::myfeature и Mylib::mylib, som kan brukes for eksempel slik:
Spesielt i vårt tilfelle, biblioteket Mylib::myfeature må kobles til når det er nødvendig å koble til biblioteket libmyfeature. Hvis det er nok overskrifter, er det verdt å bruke biblioteket Mylib::mylib.
CMake-mål kan være vanskelige, for eksempel kun ment å videresende enkelte egenskaper, avhengigheter osv. Samtidig skjer arbeidet med dem på samme måte.