Биздин жогорку максатыбызга жетүү үчүн эң биринчи нерсе – бул биз иштеп чыккан программалык камсыздоону колдонуучунун көз карашы боюнча бирдей болгон универсалдуу, обочолонгон блокторго бөлүү.
Биринчи бөлүктө мындай стандарттуу блок сүрөттөлгөн - баш китепканасы бар долбоор. Эми биздин долбоорго компиляцияланган китепкананы кошолу.
Бул үчүн, функцияны ишке ашырууну алып чыгалы 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 максаттары татаал болушу мүмкүн, мисалы, кээ бир касиеттерди, көз карандылыктарды ж.б. өткөрүү үчүн гана арналган. Ошол эле учурда алар менен иштөө да ушундай жол менен ишке ашат.