Ensimmäinen asia, joka meidän on tehtävä saavuttaaksemme korkean tavoitteemme, on jakaa kehittämämme ohjelmisto yleiskäyttöisiksi, erillisiksi lohkoiksi, jotka ovat yhdenmukaisia käyttäjän näkökulmasta.
Ensimmäisessä osassa kuvattiin tällainen standardilohko - projekti, jossa on otsikkokirjasto. Lisätään nyt koottu kirjasto projektiimme.
Tätä varten otetaan pois toiminnon toteutus myfunc erillisessä .cpp-tiedosto:
Sitten määritämme käännettävän kirjaston (myfeature), joka koostuu edellisessä vaiheessa saadusta .cpp-tiedosto. Uusi kirjasto vaatii luonnollisesti olemassa olevia otsikoita, ja tämän tarjoamiseksi se voidaan ja pitää sitoa olemassa olevaan tarkoitukseen mylib. Lisäksi niiden välinen yhteys on julkinen, mikä tarkoittaa, että kaikki mihin kohde liitetään myfeature, vastaanottaa automaattisesti kuorman ja kohteen mylib (lisää neulontamenetelmistä).
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)
+
Seuraavaksi varmistamme, että uusi kirjasto on myös asennettu järjestelmään:
On huomattava, että tarkoitukseen myfeature, mitä tulee mylib alias etuliitteellä luotiin Mylib::. Sama kirjoitetaan molemmille tarkoituksille, kun ne viedään järjestelmään asennettavaksi. Tämä tekee mahdolliseksi työskennellä yhtenäisesti minkä tahansa tavoitteiden kanssa sitova järjestelmä.
Tämän jälkeen ei enää tarvitse kuin linkittää yksikkötestit uuteen kirjastoon (funktio myfunc poistettu otsikosta, joten sinun on nyt linkitettävä):
Otsikot (Mylib::mylib) nyt sinun ei tarvitse muodostaa yhteyttä erikseen, koska, kuten jo mainittiin, ne yhdistetään automaattisesti kirjaston mukana (Mylib::myfeature).
Ja lisätään pari vivahdetta peittomittausten varmistamiseksi ottaen huomioon juuri saapunut kirjasto:
Voit lisätä lisää kirjastoja, suoritettavia tiedostoja jne. Sillä ei ole väliä, kuinka tarkasti ne liittyvät toisiinsa projektin sisällä. Ainoa tärkeä asia on, mitkä kohteet ovat moduulimme käyttöliittymä, eli ne jäävät ulos.
Nyt meillä on vakiolohkomoduulit, ja voimme hallita niitä: koota niistä minkä tahansa monimutkaisen rakenteen, asentaa ne järjestelmään tai yhdistää ne yhteen kokoonpanojärjestelmään.
Asennus järjestelmään
Yksi moduulin käyttömahdollisuuksista on asentaa moduulimme järjestelmään.
Sen jälkeen se yhdistetään mihin tahansa muuhun projektiin komennolla find_package.
find_package(Mylib 1.0 REQUIRED)
Liitäntä alimoduulina
Toinen vaihtoehto on yhdistää projektimme kansio toiseen projektiin alimoduuliksi komennolla add_subdirectory.
Käyttää
Sidosmenetelmät ovat erilaisia, mutta tulos on sama. Molemmissa tapauksissa tavoitteet ovat saatavilla projektissa käyttämällä moduuliamme Mylib::myfeature и Mylib::mylib, jota voidaan käyttää esimerkiksi näin:
Erityisesti meidän tapauksessamme kirjasto Mylib::myfeature on yhdistettävä, kun se on linkitettävä kirjastoon libmyfeature. Jos otsikoita on tarpeeksi, niin kirjastoa kannattaa käyttää Mylib::mylib.
CMake-kohteet voivat olla hankalia, esimerkiksi tarkoitettu vain joidenkin ominaisuuksien, riippuvuuksien jne. välittämiseen. Samaan aikaan heidän kanssaan työskentely tapahtuu samalla tavalla.