Yekem tiştê ku divê em bikin ji bo ku em bigihîjin armanca xweya bilind ev e ku nermalava ku em pêşdixin li blokên gerdûnî, veqetandî yên ku ji nêrîna bikarhêner yekreng in dabeş bikin.
Di beşa yekem de, blokek wusa standard hate vegotin - projeyek bi pirtûkxaneyek sernavê. Naha em pirtûkxaneyek berhevkirî li projeya xwe zêde bikin.
Ji bo vê yekê, bila em pêkanîna fonksiyonê derxînin myfunc li cihê cuda .cpp-dosî:
Dûv re em pirtûkxaneya ku were berhev kirin diyar dikin (myfeature), ku dê ji tiştê ku di gava berê de hatî bidestxistin pêk tê .cpp-dosî. Pirtûkxaneya nû eşkere sernivîsên heyî hewce dike, û ji bo peydakirina vê, ew dikare û divê bi armanca heyî ve were girêdan. mylib. Wekî din, girêdana di navbera wan de gelemperî ye, ku tê vê wateyê ku her tiştê ku armanc dê pê ve girêdayî be myfeature, dê bixweber bar û armancê bistînin mylib (bêtir li ser rêbazên knitting).
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)
+
Piştre, em ê piştrast bikin ku pirtûkxaneya nû jî li ser pergalê hatî saz kirin:
Divê bê zanîn ku ji bo armanca myfeature, ji bo mylib navekî bi pêşgir hate afirandin Mylib::. Heman tişt ji bo her du armancan têne nivîsandin dema ku wan ji bo sazkirinê li ser pergalê têne şandin. Ev dihêle ku ji bo her yekê bi yekdengî bi armancan re bixebitin plana girêdanê.
Piştî vê yekê, ya ku dimîne ev e ku hûn ceribandinên yekîneyê bi pirtûkxaneya nû ve girêdin (fonk myfunc ji sernavê hatî derxistin, ji ber vê yekê naha hûn hewce ne ku girêdin):
Sernav (Mylib::mylib) naha hûn ne hewce ne ku ji hev veqetînin, ji ber ku, wekî ku berê hatî behs kirin, ew bixweber bi pirtûkxaneyê ve têne girêdan (Mylib::myfeature).
We ka em çend nuwazeyan lê zêde bikin da ku pîvandinên vegirtinê bi hesabkirina pirtûkxaneya nûhatî piştrast bikin:
Hûn dikarin bêtir pirtûkxane, kargêr, hwd zêde bikin. Ne girîng e ku ew di nav projeyê de çiqas bi hevûdu ve girêdayî ne. Tişta tenê girîng ev e ku kîjan armanc pêwendiya modula me ne, ango ew li ber xwe didin.
Naha me modulên blokê yên standard hene, û em dikarin wan serdest bikin: wan di nav avahiyek her tevlihevî de berhev bikin, wan li pergalek saz bikin an wan di nav pergalek meclîsê de bi hev re girêdin.
Sazkirina nav sîstemê
Yek ji vebijarkên ji bo karanîna modulê sazkirina modula me di pergalê de ye.
Piştî wê, ew bi karanîna fermanê bi projeyek din ve girêdayî ye find_package.
find_package(Mylib 1.0 REQUIRED)
Têkilî wekî submodule
Vebijarkek din ev e ku em peldankê bi projeya xwe ve bi projeyek din ve wekî submodulek bi karanîna fermanê ve girêbidin add_subdirectory.
Bikar bînin
Rêbazên girêdanê cuda ne, lê encam yek e. Di her du rewşan de, armanc dê di projeyê de bi karanîna modula me peyda bibin Mylib::myfeature и Mylib::mylib, ku dikare were bikar anîn, bo nimûne, wekî vê:
Bi taybetî di doza me de, pirtûkxane Mylib::myfeature Dema ku pêdivî ye ku bi pirtûkxaneyê re were girêdan pêdivî ye ku were girêdan libmyfeature. Ger sernivîsên têr hebin, wê hingê hêja ye ku pirtûkxaneyê bikar bînin Mylib::mylib.
Armancên CMake dikarin xapînok bin, mînakî, ku tenê ji bo şandina hin taybetmendî, girêdan, hwd têne armanc kirin. Di heman demê de, xebata bi wan re bi heman rengî pêk tê.