Sa chuid roimhe seo Labhair an scéal siamsúil seo faoi leabharlann ceanntásc a eagrú laistigh de ghineadóir córais tógála CMake.
An uair seo cuirfimid leabharlann tiomsaithe leis, agus labhróimid freisin faoi mhodúil a nascadh lena chéile.
Mar a bhí roimhe seo, is féidir leo siúd atá mífhoighneach láithreach téigh go dtí an stór nuashonraithe agus déan teagmháil le gach rud le do lámha féin.
Is é an chéad rud is gá dúinn a dhéanamh chun ár n-ardsprioc a bhaint amach ná na bogearraí a fhorbraímid a roinnt ina mbloic uilíocha iargúlta atá aonfhoirmeach ó thaobh an úsáideora de.
Sa chéad chuid, rinneadh cur síos ar bhloc caighdeánach den sórt sin - tionscadal le leabharlann ceanntásc. Anois cuirimis leabharlann tiomsaithe lenár dtionscadal.
Chun seo a dhéanamh, déanaimis cur i bhfeidhm na feidhme a bhaint amach myfunc i leith .cpp-comhad:
Ansin sainímid an leabharlann atá le tiomsú (myfeature), a bheidh comhdhéanta den méid a fuarthas sa chéim roimhe seo .cpp-chomhad. Is léir go dteastaíonn ceanntásca reatha ón leabharlann nua, agus chun é seo a sholáthar, is féidir agus ba chóir go mbeadh sé ceangailte leis an gcuspóir atá ann faoi láthair. mylib. Thairis sin, tá an nasc eatarthu poiblí, rud a chiallaíonn go mbeidh gach rud a mbeidh an sprioc ceangailte leis myfeature, gheobhaidh sé an t-ualach agus an sprioc go huathoibríoch mylib (tuilleadh faoi mhodhanna cniotála).
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)
+
Ansin, déanfaimid cinnte go bhfuil an leabharlann nua suiteáilte ar an gcóras freisin:
Ba chóir a thabhairt faoi deara gur chun na críche sin myfeature, Maidir le mylib cruthaíodh ailias le réimír Mylib::. Scríobhtar an rud céanna don dá chuspóir agus iad á n-onnmhairiú lena suiteáil ar an gcóras. Fágann sé seo gur féidir oibriú go haonfhoirmeach le spriocanna d’aon cheann scéim cheangailteach.
Ina dhiaidh sin, níl fágtha ach tástálacha aonaid a nascadh leis an leabharlann nua (feidhm myfunc tógtha as an teideal, mar sin anois ní mór duit nasc a dhéanamh):
Ceannteidil (Mylib::mylib) anois ní gá duit ceangal ar leithligh a dhéanamh, mar, mar a luadh cheana, tá siad ceangailte go huathoibríoch leis an leabharlann (Mylib::myfeature).
Agus cuirimis cúpla nuances leis chun tomhais clúdaigh a chinntiú ag cur san áireamh an leabharlann nua-theacht:
Is féidir leat níos mó leabharlanna, earraí inrite, etc. Is cuma cé chomh díreach agus atá siad ceangailte lena chéile laistigh den tionscadal. Is é an t-aon rud atá tábhachtach ná cé na spriocanna atá mar chomhéadan ár modúl, is é sin, go gcloíonn siad amach.
Anois tá blocmhodúil chaighdeánacha againn, agus is féidir linn ceannas a ghlacadh orthu: iad a chumadh i struchtúr d'aon chastacht, iad a shuiteáil i gcóras nó iad a nascadh le chéile laistigh de chóras tionóil amháin.
Suiteáil isteach sa chóras
Ceann de na roghanna chun an modúl a úsáid ná ár modúl a shuiteáil sa chóras.
Tar éis sin, tá sé ceangailte le haon tionscadal eile ag baint úsáide as an ordú find_package.
find_package(Mylib 1.0 REQUIRED)
Ceangal mar fhomhodúl
Rogha eile ná an fillteán lenár dtionscadal a nascadh le tionscadal eile mar fhomhodúl ag baint úsáide as an ordú add_subdirectory.
Úsáid
Tá na modhanna ceangailteach difriúil, ach tá an toradh mar an gcéanna. Sa dá chás, beidh spriocanna ar fáil sa tionscadal ag baint úsáide as ár modúl Mylib::myfeature и Mylib::mylib, ar féidir a úsáid, mar shampla, mar seo:
Go sonrach inár gcás, an leabharlann Mylib::myfeature a cheangal nuair is gá nascadh leis an leabharlann libmyfeature. Má tá go leor ceanntásca ann, is fiú an leabharlann a úsáid Mylib::mylib.
Is féidir le spriocanna CMake a bheith deacair, mar shampla, atá beartaithe ach chun roinnt maoine, spleáchais, etc. Ag an am céanna, tarlaíonn oibriú leo ar an mbealach céanna.