Premye bagay nou bezwen fè pou reyalize objektif elve nou an se divize lojisyèl nou devlope an inivèsèl, blòk izole ki inifòm nan pwen de vi itilizatè a.
Nan premye pati a, yo te dekri tankou yon blòk estanda - yon pwojè ak yon bibliyotèk header. Koulye a, ann ajoute yon bibliyotèk konpile nan pwojè nou an.
Pou fè sa, se pou yo retire aplikasyon an nan fonksyon an myfunc nan yon separe .cpp-dosye:
Lè sa a, nou defini bibliyotèk la dwe konpile (myfeature), ki pral konpoze de sa ki te jwenn nan etap anvan an .cpp-dosye. Nouvo bibliyotèk la evidamman mande pou tèt ki egziste deja, epi yo nan lòd yo bay sa a, li ka e li ta dwe mare nan objektif ki egziste deja. mylib. Anplis, koneksyon ki genyen ant yo se piblik, ki vle di ke tout bagay ki pral sib la dwe konekte myfeature, pral otomatikman resevwa chaj la ak sib mylib (plis sou metòd trikote).
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)
+
Apre sa, nou pral asire w ke nouvo bibliyotèk la enstale tou sou sistèm nan:
Li ta dwe remake ke nan objektif la myfeature, tankou mylib yo te kreye yon alyas ak yon prefiks Mylib::. Menm bagay la tou ekri pou tou de rezon lè yo ekspòte yo pou enstalasyon sou sistèm lan. Sa fè li posib pou travay menm jan ak objektif pou nenpòt ki konplo obligatwa.
Apre sa, tout sa ki rete se konekte tès inite yo ak nouvo bibliyotèk la (fonksyon myfunc retire nan tit la, kidonk kounye a ou bezwen konekte):
Tit (Mylib::mylib) kounye a ou pa bezwen konekte separeman, paske, kòm deja mansyone, yo otomatikman konekte ansanm ak bibliyotèk la (Mylib::myfeature).
Epi ann ajoute yon koup de nuans pou asire mezi kouvèti asirans yo pran an kont bibliyotèk ki fèk rive:
Ou ka ajoute plis bibliyotèk, ègzèkutabl, elatriye. Li pa enpòtan ki jan egzakteman yo konekte youn ak lòt nan pwojè a. Bagay la sèlman enpòtan se ki objektif yo se koòdone nan modil nou an, se sa ki, yo bwa deyò.
Koulye a, nou gen modil blòk estanda, epi nou ka domine yo: konpoze yo nan yon estrikti nan nenpòt ki konpleksite, enstale yo nan yon sistèm oswa konekte yo ansanm nan yon sèl sistèm asanble.
Enstalasyon nan sistèm lan
Youn nan opsyon pou itilize modil la se enstale modil nou an nan sistèm nan.
Apre sa, li konekte ak nenpòt lòt pwojè lè l sèvi avèk lòd la find_package.
find_package(Mylib 1.0 REQUIRED)
Koneksyon kòm yon soumodil
Yon lòt opsyon se konekte katab la ak pwojè nou an nan yon lòt pwojè kòm yon submodule lè l sèvi avèk lòd la add_subdirectory.
Sèvi ak
Metòd obligatwa yo diferan, men rezilta a se menm. Nan de ka yo, objektif yo ap disponib nan pwojè a lè l sèvi avèk modil nou an Mylib::myfeature и Mylib::mylib, ki ka itilize, pou egzanp, tankou sa a:
Espesyalman nan ka nou an, bibliyotèk la Mylib::myfeature bezwen konekte lè li nesesè pou konekte ak bibliyotèk la libmyfeature. Si gen ase headers, Lè sa a, li vo itilize bibliyotèk la Mylib::mylib.
Objektif CMake yo ka difisil, pou egzanp, gen entansyon sèlman pou voye kèk pwopriyete, depandans, elatriye. An menm tan an, travay ak yo rive nan menm fason an.