Det første, vi skal gøre for at nå vores høje mål, er at opdele den software, vi udvikler, i universelle, isolerede blokke, der er ensartede fra brugerens synspunkt.
I den første del blev en sådan standardblok beskrevet - et projekt med et header-bibliotek. Lad os nu tilføje et kompileret bibliotek til vores projekt.
For at gøre dette, lad os tage implementeringen af funktionen ud myfunc i en separat .cpp-fil:
Derefter definerer vi det bibliotek, der skal kompileres (myfeature), som vil bestå af det, der blev opnået i det foregående trin .cpp-fil. Det nye bibliotek kræver naturligvis eksisterende headere, og for at kunne levere dette kan og bør det knyttes til det eksisterende formål mylib. Desuden er forbindelsen mellem dem offentlig, hvilket betyder, at alt, som målet vil være forbundet med myfeature, vil automatisk modtage belastningen og målet mylib (mere 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)
+
Dernæst sørger vi for, at det nye bibliotek også er installeret på systemet:
Det skal bemærkes, at til formålet myfeature, som for mylib et alias med et præfiks blev oprettet Mylib::. Det samme er skrevet til begge formål, når de eksporteres til installation på systemet. Dette gør det muligt at arbejde ensartet med mål for evt bindende ordning.
Herefter er der kun tilbage at forbinde enhedstest med det nye bibliotek (funktion myfunc taget ud af titlen, så nu skal du linke):
Overskrifter (Mylib::mylib) nu behøver du ikke oprette forbindelse separat, for som allerede nævnt forbindes de automatisk sammen med biblioteket (Mylib::myfeature).
Og lad os tilføje et par nuancer for at sikre dækningsmålinger under hensyntagen til det nyligt ankomne bibliotek:
Du kan tilføje flere biblioteker, eksekverbare filer osv. Det er lige meget, hvor præcist de er forbundet med hinanden inden for projektet. Det eneste vigtige er, hvilke mål der er grænsefladen for vores modul, det vil sige, de stikker ud.
Nu har vi standardblokmoduler, og vi kan dominere dem: sammensætte dem til en struktur af enhver kompleksitet, installere dem i et system eller sammenkæde dem i et enkelt montagesystem.
Installation i systemet
En af mulighederne for at bruge modulet er at installere vores modul i systemet.
Derefter er det forbundet til ethvert andet projekt ved hjælp af kommandoen find_package.
find_package(Mylib 1.0 REQUIRED)
Tilslutning som et undermodul
En anden mulighed er at forbinde mappen med vores projekt til et andet projekt som et undermodul ved hjælp af kommandoen add_subdirectory.
Brug
Bindingsmetoderne er forskellige, men resultatet er det samme. I begge tilfælde vil mål være tilgængelige i projektet ved hjælp af vores modul Mylib::myfeature и Mylib::mylib, som for eksempel kan bruges sådan:
Specifikt i vores tilfælde, biblioteket Mylib::myfeature skal tilsluttes, når det er nødvendigt at forbinde med biblioteket libmyfeature. Hvis der er nok overskrifter, så er det værd at bruge biblioteket Mylib::mylib.
CMake-mål kan være vanskelige, for eksempel kun beregnet til at videresende nogle egenskaber, afhængigheder osv. Samtidig foregår arbejdet med dem på samme måde.