Біздің жоғары мақсатымызға жету үшін бірінші кезекте біз жасайтын бағдарламалық жасақтаманы пайдаланушы көзқарасы бойынша біркелкі әмбебап, оқшауланған блоктарға бөлу керек.
Бірінші бөлімде мұндай стандартты блок сипатталды - тақырып кітапханасы бар жоба. Енді жобамызға жинақталған кітапхананы қосамыз.
Ол үшін функцияның орындалуын шығарайық 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 мақсаттары қиын болуы мүмкін, мысалы, тек кейбір сипаттарды, тәуелділіктерді және т.б. жіберуге арналған. Сонымен бірге олармен жұмыс істеу де осылай жүреді.