Magasztos célunk eléréséhez az első dolog, hogy az általunk fejlesztett szoftvert univerzális, izolált, a felhasználó szempontjából egységes blokkokra osszuk.
Az első részben egy ilyen szabványos blokkot írtak le - egy projektet fejléckönyvtárral. Most adjunk hozzá egy összeállított könyvtárat a projektünkhöz.
Ehhez vegyük ki a függvény megvalósítását myfunc egy különállóban .cpp-fájl:
Ezután meghatározzuk a lefordítandó könyvtárat (myfeature), amely az előző lépésben kapott adatokból fog állni .cpp- fájl. Az új könyvtár nyilvánvalóan meglévő fejléceket igényel, és ennek biztosításához kötni lehet és kell a meglévő célhoz mylib. Ráadásul a köztük lévő kapcsolat nyilvános, ami azt jelenti, hogy minden, amihez a célpont kapcsolódik myfeature, automatikusan megkapja a terhelést és a célt mylib (bővebben a kötési módokról).
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)
+
Ezután megbizonyosodunk arról, hogy az új könyvtár is telepítve van a rendszeren:
Meg kell jegyezni, hogy a cél érdekében myfeature, ami azt illeti mylib előtaggal ellátott alias jött létre Mylib::. Ugyanezt írják mindkét célra, amikor exportálják őket a rendszerre történő telepítéshez. Ez lehetővé teszi, hogy bármilyen céllal egységesen dolgozzunk kötelező érvényű séma.
Ezek után már csak az egységteszteket kell összekapcsolni az új könyvtárral (függvény myfunc kikerült a címből, ezért most linkelni kell):
Hozzáadhat több könyvtárat, végrehajtható fájlt stb. Nem mindegy, hogy pontosan hogyan kapcsolódnak egymáshoz a projekten belül. Csak az a fontos, hogy mely célpontok képezik a modulunk felületét, vagyis kilógnak.
Most már szabványos blokkmoduljaink vannak, és uralni tudjuk őket: tetszőleges bonyolultságú szerkezetté alakíthatjuk, rendszerbe építhetjük, vagy egyetlen összeállítási rendszeren belül összekapcsolhatjuk őket.
Telepítés a rendszerbe
A modul használatának egyik lehetősége, hogy a modulunkat telepítjük a rendszerbe.
Ezt követően a paranccsal csatlakozik bármely másik projekthez find_package.
find_package(Mylib 1.0 REQUIRED)
Csatlakozás almodulként
Egy másik lehetőség, hogy a projektünkkel rendelkező mappát a paranccsal egy másik projekthez kapcsoljuk almodulként add_subdirectory.
Használat
A kötési módszerek eltérőek, de az eredmény ugyanaz. A célok mindkét esetben elérhetőek lesznek a projektben a modulunk segítségével Mylib::myfeature и Mylib::mylib, amely például így használható:
Konkrétan a mi esetünkben a könyvtár Mylib::myfeature csatlakoztatni kell, ha a könyvtárhoz kell kapcsolni libmyfeature. Ha van elég fejléc, akkor érdemes a könyvtárat használni Mylib::mylib.
A CMake célok trükkösek lehetnek, például csak bizonyos tulajdonságok, függőségek stb. továbbítására szolgálnak. Ugyanakkor a velük való munka ugyanúgy történik.