It earste ding dat wy moatte dwaan om ús hege doel te berikken is om de software dy't wy ûntwikkelje te ferdielen yn universele, isolearre blokken dy't unifoarm binne út it eachpunt fan 'e brûker.
Yn it earste diel waard sa'n standertblok beskreaun - in projekt mei in koptekstbibleteek. Litte wy no in gearstalde bibleteek tafoegje oan ús projekt.
Om dit te dwaan, litte wy de útfiering fan 'e funksje útnimme myfunc yn in apart .cpp-map:
Dan definiearje wy de te kompilearjen bibleteek (myfeature), dy't sil bestean út wat waard krigen yn 'e foarige stap .cpp-map. De nije bibleteek fereasket fansels besteande kopteksten, en om dit te leverjen kin en moat it keppele wurde oan it besteande doel mylib. Boppedat, de ferbining tusken harren is iepenbier, dat betsjut dat alles dêr't it doel sil wêze ferbûn myfeature, sil automatysk de lading en it doel ûntfange mylib (mear oer breimethoden).
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)
+
Folgjende sille wy derfoar soargje dat de nije bibleteek ek is ynstalleare op it systeem:
Dêrby moat opmurken wurde dat foar it doel myfeature, as foar mylib in alias mei in foarheaksel is makke Mylib::. Itselde wurdt skreaun foar beide doelen as se eksportearje foar ynstallaasje op it systeem. Dit makket it mooglik om te wurkjen unifoarm mei doelen foar eltse binende skema.
Hjirnei bliuwt alles oer om ienheidstests te keppeljen mei de nije bibleteek (funksje myfunc út 'e titel helle, dus no moatte jo keppelje):
Jo kinne mear biblioteken, útfierbere bestannen, ensfh. It makket net út hoe krekt se binnen it projekt mei elkoar ferbûn binne. It ienige wichtige ding is hokker doelen de ynterface fan ús module binne, dat is, se stekke út.
No hawwe wy standert blokmodules, en wy kinne se dominearje: komponearje se yn in struktuer fan elke kompleksiteit, ynstallearje se yn in systeem of keppelje se mei-inoar binnen ien assemblagesysteem.
Ynstallaasje yn it systeem
Ien fan 'e opsjes foar it brûken fan de module is om ús module yn it systeem te ynstallearjen.
Dêrnei is it ferbûn mei in oar projekt mei it kommando find_package.
find_package(Mylib 1.0 REQUIRED)
Ferbining as submodule
In oare opsje is om de map mei ús projekt te ferbinen mei in oar projekt as submodule mei it kommando add_subdirectory.
Gebrûk
De binende metoaden binne oars, mar it resultaat is itselde. Yn beide gefallen sille doelen beskikber wêze yn it projekt mei ús module Mylib::myfeature и Mylib::mylib, dat kin brûkt wurde, bygelyks, sa:
Spesifyk yn ús gefal, de biblioteek Mylib::myfeature moatte wurde ferbûn as it nedich is om te keppeljen mei de bibleteek libmyfeature. As d'r genôch kopteksten binne, dan is it wurdich de bibleteek te brûken Mylib::mylib.
CMake-doelen kinne lestich wêze, bygelyks, allinich bedoeld om guon eigenskippen, ôfhinklikens, ensfh. Tagelyk komt it wurkjen mei har op deselde wize foar.