Það fyrsta sem við þurfum að gera til að ná háleitu markmiði okkar er að skipta hugbúnaðinum sem við þróum í alhliða, einangraðar blokkir sem eru einsleitar frá sjónarhóli notandans.
Í fyrsta hluta var slíkri stöðluðu blokk lýst - verkefni með hausbókasafni. Nú skulum við bæta samsettu bókasafni við verkefnið okkar.
Til að gera þetta skulum við taka út framkvæmd aðgerðarinnar myfunc í sér .cpp-skrá:
Síðan skilgreinum við bókasafnið sem á að safna saman (myfeature), sem mun samanstanda af því sem fékkst í fyrra skrefi .cpp-skrá. Nýja bókasafnið krefst augljóslega fyrirliggjandi hausa og til að veita þetta getur og ætti það að vera bundið við núverandi tilgang mylib. Þar að auki eru tengslin á milli þeirra opinber, sem þýðir að allt sem skotmarkið verður tengt við myfeature, mun sjálfkrafa taka á móti álaginu og markmiðinu mylib (meira um prjónaaðferðir).
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)
+
Næst munum við ganga úr skugga um að nýja bókasafnið sé einnig sett upp á kerfinu:
Það skal tekið fram að í þeim tilgangi myfeature, Eins og fyrir mylib samnefni með forskeyti var búið til Mylib::. Sama er skrifað í báðum tilgangi þegar þau eru flutt út til uppsetningar á kerfinu. Þetta gerir það mögulegt að vinna einsleitt með markmið fyrir hvaða bindandi kerfi.
Eftir þetta er allt sem eftir er að tengja einingapróf við nýja bókasafnið (function myfunc tekið út úr titlinum, svo nú þarftu að tengja):
Fyrirsagnir (Mylib::mylib) Nú þarftu ekki að tengjast sérstaklega, því eins og áður hefur komið fram eru þeir sjálfkrafa tengdir ásamt bókasafninu (Mylib::myfeature).
Og við skulum bæta við nokkrum blæbrigðum til að tryggja þekjumælingar með hliðsjón af nýkomnu bókasafni:
Þú getur bætt við fleiri bókasöfnum, executables o.fl. Það skiptir ekki máli hversu nákvæmlega þau tengjast hver öðrum innan verkefnisins. Það eina sem skiptir máli er hvaða markmið eru viðmót einingarinnar okkar, það er að segja þau standa út.
Nú erum við með staðlaðar blokkareiningar og við getum drottnað yfir þeim: sett þær saman í skipulag af hvaða flóknu sem er, sett þær upp í kerfi eða tengt þær saman í einu samsetningarkerfi.
Uppsetning inn í kerfið
Einn af möguleikunum til að nota eininguna er að setja eininguna okkar inn í kerfið.
Eftir það er það tengt við öll önnur verkefni með því að nota skipunina find_package.
find_package(Mylib 1.0 REQUIRED)
Tenging sem undireining
Annar valkostur er að tengja möppuna við verkefnið okkar við annað verkefni sem undireiningu með því að nota skipunina add_subdirectory.
Nota
Bindunaraðferðirnar eru mismunandi en niðurstaðan er sú sama. Í báðum tilvikum verða markmið tiltæk í verkefninu með því að nota eininguna okkar Mylib::myfeature и Mylib::mylib, sem hægt er að nota, til dæmis, svona:
Sérstaklega í okkar tilviki, bókasafnið Mylib::myfeature þarf að vera tengdur þegar nauðsynlegt er að tengja við bókasafnið libmyfeature. Ef það eru nógu margir hausar, þá er það þess virði að nota bókasafnið Mylib::mylib.
CMake markmið geta verið erfið, til dæmis, eingöngu ætluð til að senda nokkrar eignir, ósjálfstæði osfrv. Á sama tíma fer vinna með þau fram á sama hátt.