Առաջին բանը, որ մենք պետք է անենք մեր վեհ նպատակին հասնելու համար, մեր մշակած ծրագրաշարը բաժանելն է ունիվերսալ, մեկուսացված բլոկների, որոնք միատեսակ են օգտատիրոջ տեսանկյունից:
Առաջին մասում նկարագրվեց այսպիսի ստանդարտ բլոկ՝ վերնագրի գրադարանով նախագիծ։ Այժմ եկեք մեր նախագծին ավելացնենք կազմված գրադարան։
Դա անելու համար եկեք հանենք գործառույթի իրականացումը myfunc առանձին .cpp- ֆայլ:
Այնուհետև մենք սահմանում ենք այն գրադարանը, որը պետք է կազմվի (myfeature), որը բաղկացած կլինի նախորդ քայլում ստացվածից .cpp- ֆայլ: Նոր գրադարանն ակնհայտորեն պահանջում է գոյություն ունեցող վերնագրեր, և դա ապահովելու համար այն կարող է և պետք է կապված լինի առկա նպատակի հետ: mylib. Ընդ որում, նրանց միջև կապը հրապարակային է, ինչը նշանակում է, որ այն ամենը, ինչին կապվելու է թիրախը myfeature, ավտոմատ կերպով կստանա բեռը և թիրախը mylib (ավելի շատ տրիկոտաժի մեթոդների մասին).
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)
+
Հաջորդը, մենք կհամոզվենք, որ նոր գրադարանը նույնպես տեղադրված է համակարգում.
Հարկ է նշել, որ այդ նպատակով myfeature, ինչ վերաբերում է mylib ստեղծվել է նախածանցով կեղծանուն Mylib::. Նույնը գրված է երկու նպատակների համար էլ դրանք համակարգում տեղադրելու համար արտահանելիս։ Սա հնարավորություն է տալիս միատեսակ աշխատել ցանկացած նպատակների հետ պարտադիր սխեմա.
Դրանից հետո մնում է միավորի թեստերը կապել նոր գրադարանի հետ (գործառույթ myfunc վերնագրից հանված, այնպես որ հիմա պետք է կապել):
Վերնագրեր (Mylib::mylib) այժմ ձեզ հարկավոր չէ առանձին միանալ, քանի որ, ինչպես արդեն նշվեց, դրանք ավտոմատ կերպով միացված են գրադարանի հետ միասին (Mylib::myfeature).
Եվ եկեք ավելացնենք մի քանի նրբերանգներ, որպեսզի ապահովենք ծածկույթի չափումները՝ հաշվի առնելով նոր ժամանած գրադարանը.
Դուք կարող եք ավելացնել ավելի շատ գրադարաններ, գործադիրներ և այլն: Կարևոր չէ, թե կոնկրետ ինչքանով են դրանք կապված միմյանց հետ նախագծի շրջանակներում։ Միակ կարևորն այն է, թե որ թիրախներն են մեր մոդուլի ինտերֆեյսը, այսինքն՝ դուրս են մնում։
Այժմ մենք ունենք ստանդարտ բլոկային մոդուլներ, և մենք կարող ենք գերակայել դրանց վրա. դրանք շարադրել ցանկացած բարդության կառուցվածքի մեջ, տեղադրել դրանք համակարգում կամ կապել դրանք մեկ հավաքման համակարգի մեջ:
Տեղադրում համակարգում
Մոդուլի օգտագործման տարբերակներից մեկը մեր մոդուլը համակարգում տեղադրելն է:
Դրանից հետո այն միացված է ցանկացած այլ նախագծի՝ օգտագործելով հրամանը find_package.
find_package(Mylib 1.0 REQUIRED)
Միացումը որպես ենթամոդուլ
Մեկ այլ տարբերակ է մեր նախագծի հետ թղթապանակը միացնել մեկ այլ նախագծի՝ որպես ենթամոդուլ՝ օգտագործելով հրամանը add_subdirectory.
Օգտագործում
Պարտադիր մեթոդները տարբեր են, բայց արդյունքը նույնն է: Երկու դեպքում էլ նպատակները հասանելի կլինեն նախագծում՝ օգտագործելով մեր մոդուլը Mylib::myfeature и Mylib::mylib, որը կարող է օգտագործվել, օրինակ, այսպես.
Կոնկրետ մեր դեպքում գրադարանը Mylib::myfeature անհրաժեշտ է միացնել, երբ անհրաժեշտ է կապվել գրադարանի հետ libmyfeature. Եթե կան բավարար վերնագրեր, ապա արժե օգտվել գրադարանից Mylib::mylib.
CMake թիրախները կարող են բարդ լինել, օրինակ՝ նախատեսված միայն որոշ հատկություններ, կախվածություններ և այլն փոխանցելու համար: Միեւնույն ժամանակ, նրանց հետ աշխատելը տեղի է ունենում նույն կերպ: