Hal kahiji anu kedah dilakukeun pikeun ngahontal tujuan anu luhur nyaéta ngabagi parangkat lunak anu dikembangkeun kana blok terasing universal anu seragam tina sudut pandang pangguna.
Dina bagian kahiji dijelaskeun blok wangunan misalna - proyék kalawan perpustakaan lulugu. Ayeuna hayu urang tambahkeun perpustakaan anu disusun pikeun proyék urang.
Jang ngalampahkeun ieu, urang bakal nyandak kaluar palaksanaan fungsi myfunc kana misah .cpp-file:
Teras we ngartikeun perpustakaan anu bakal dikompilasi (myfeature), nu bakal diwangun ku diala dina hambalan saméméhna .cpp- file. Perpustakaan anyar écés peryogi header anu tos aya, sareng pikeun nyayogikeun ieu, éta tiasa sareng kedah dihubungkeun sareng tujuan anu tos aya. mylib. Leuwih ti éta, beungkeutan antara aranjeunna umum, nu hartina sagalana nu udagan bakal disambungkeun myfeature, otomatis bakal nampi beban sareng target mylib (langkung seueur ngeunaan cara ngiket).
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)
+
Salajengna, urang bakal mastikeun yén perpustakaan anyar ogé dipasang dina sistem:
Ieu kudu dicatet yén pikeun tujuan myfeature, sakumaha keur mylib landian dijieun kalawan awalan a Mylib::. Hal anu sami diserat pikeun duanana tujuan nalika ngékspor aranjeunna pikeun dipasang dina sistem. Hal ieu ngamungkinkeun pikeun digawé seragam jeung tujuan pikeun sagala skéma mengikat.
Saatos éta, éta tetep ngahijikeun tés unit sareng perpustakaan énggal (fungsi myfunc dipindahkeun kaluar tina lulugu, jadi ayeuna anjeun kudu numbu):
Judul (Mylib::mylib) ayeuna anjeun henteu kedah nyambung kapisah, sabab, sakumaha anu parantos disebatkeun, aranjeunna otomatis dihubungkeun sareng perpustakaan (Mylib::myfeature).
Sareng hayu urang tambahkeun sababaraha nuansa pikeun mastikeun pangukuran cakupan kalayan merhatikeun perpustakaan anu nembé sumping:
Anjeun tiasa nambihan langkung seueur perpustakaan, executable, jsb. Henteu janten masalah kumaha persisna aranjeunna dirajut babarengan dina kerangka proyék. Hiji-hijina hal anu penting nyaéta anu targétna nyaéta antarmuka modul urang, nyaéta, lengket.
Ayeuna urang gaduh modul-blok standar, sareng urang tiasa maréntahkeunana: nyusun struktur pajeulitna ti aranjeunna, pasang kana sistem atanapi ngahubungkeun aranjeunna dina hiji sistem assembly tunggal.
Pamasangan sistem
Salah sahiji pilihan pikeun ngagunakeun modul nyaéta masang modul kami dina sistem.
Sanggeus éta, éta disambungkeun ka sagala proyék séjén maké paréntah find_package.
find_package(Mylib 1.0 REQUIRED)
Nyambungkeun salaku submodule a
Pilihan séjén nyaéta pikeun nyambungkeun polder sareng proyék kami ka proyék sanés salaku submodule nganggo paréntah add_subdirectory.
pamakean
Métode ngariung béda, tapi hasilna sami. Dina duanana kasus, dina proyék ngagunakeun modul urang, tujuan bakal sadia Mylib::myfeature и Mylib::mylib, anu tiasa dianggo, contona, sapertos kieu:
Husus, dina hal urang, perpustakaan Mylib::myfeature anjeun kedah nyambungkeun nalika anjeun kedah ngaitkeun perpustakaan libmyfeature. Upami aya cukup header, maka anjeun kedah nganggo perpustakaan Mylib::mylib.
Target CMake tiasa rumit, contona, ngan ukur pikeun neraskeun sababaraha pasipatan, kagumantungan, jsb. Dina waktos anu sami, aranjeunna tiasa dianggo dina cara anu sami.