
Trafododd y stori ddifyr hon drefniadaeth y llyfrgell penawdau o fewn generadur system adeiladu CMake.
Y tro hwn byddwn yn ychwanegu llyfrgell wedi'i llunio ato, a hefyd yn siarad am gysylltu modiwlau â'i gilydd.
Fel o'r blaen, gall y rhai sy'n ddiamynedd ar unwaith a chyffwrdd â phopeth â'ch dwylo eich hun.
Cynnwys
Y peth cyntaf sydd angen i ni ei wneud i gyflawni ein nod uchelgeisiol yw rhannu'r feddalwedd sy'n cael ei datblygu yn flociau cyffredinol, ynysig sy'n unffurf o safbwynt y defnyddiwr.
Yn y rhan gyntaf, disgrifiwyd bloc prosiect safonol—prosiect gyda llyfrgell penawdau. Nawr gadewch i ni ychwanegu llyfrgell wedi'i llunio at ein prosiect.
I wneud hyn, byddwn yn tynnu allan weithrediad y swyddogaeth myfunc mewn ar wahân .cpp-ffeil:
diff --git a/include/mylib/myfeature.hpp b/include/mylib/myfeature.hpp
index 43db388..ba62b4f 100644
--- a/include/mylib/myfeature.hpp
+++ b/include/mylib/myfeature.hpp
@@ -46,8 +46,5 @@ namespace mylib
~ see mystruct
*/
- inline bool myfunc (mystruct)
- {
- return true;
- }
+ bool myfunc (mystruct);
}
diff --git a/src/mylib/myfeature.cpp b/src/mylib/myfeature.cpp
new file mode 100644
index 0000000..abb5004
--- /dev/null
+++ b/src/mylib/myfeature.cpp
@@ -0,0 +1,9 @@
+#include <mylib/myfeature.hpp>
+
+namespace mylib
+{
+ bool myfunc (mystruct)
+ {
+ return true;
+ }
+}Yna rydym yn diffinio'r llyfrgell a luniwyd (myfeature), a fydd yn cynnwys yr hyn a gafwyd yn y cam blaenorol .cpp-ffail. Mae'r llyfrgell newydd yn amlwg angen penawdau presennol, ac i sicrhau hyn, gellir a dylid ei chysylltu â'r targed presennol mylibAr ben hynny, mae'r cysylltiad rhyngddynt yn gyhoeddus, sy'n golygu y bydd popeth y bydd y targed yn gysylltiedig ag ef myfeature, yn derbyn targed yn awtomatig fel bonws 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)
+Nesaf, byddwn yn sicrhau bod y llyfrgell newydd hefyd wedi'i gosod yn y system:
@@ -72,7 +83,7 @@ add_library(Mylib::mylib ALIAS mylib)
install(DIRECTORY include/mylib DESTINATION include)
-install(TARGETS mylib EXPORT MylibConfig)
+install(TARGETS mylib myfeature EXPORT MylibConfig)
install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)
include(CMakePackageConfigHelpers)Dylid nodi, at y diben myfeature, o ran mylib crëwyd ffugenw gyda rhagddodiad Mylib::Rhagnodir yr un peth ar gyfer y ddau darged wrth eu hallforio i'w gosod yn y system. Mae hyn yn caniatáu gwaith cyson gyda thargedau waeth beth fo .
Ar ôl hyn, y cyfan sydd ar ôl yw cysylltu'r profion uned â'r llyfrgell newydd (swyddogaeth myfunc wedi'i dynnu o'r teitl, felly nawr mae angen i chi gysylltu):
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 5620be4..bc1266c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -4,7 +4,7 @@ add_executable(mylib-unit-tests test_main.cpp)
target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
target_link_libraries(mylib-unit-tests
PRIVATE
- Mylib::mylib
+ Mylib::myfeature
doctest::doctest
)Penawdau (Mylib::mylib) nawr does dim angen i chi eu cysylltu ar wahân, oherwydd, fel y soniwyd eisoes, maen nhw'n cael eu cysylltu'n awtomatig ynghyd â'r llyfrgell (Mylib::myfeature).
A gadewch i ni ychwanegu cwpl o naws i sicrhau bod mesuriadau'r sylw yn ystyried y llyfrgell sydd newydd gyrraedd:
@@ -15,11 +15,16 @@ if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)
target_compile_options(mylib-unit-tests PRIVATE --coverage)
target_link_libraries(mylib-unit-tests PRIVATE gcov)
+ target_compile_options(myfeature PRIVATE --coverage)
+ target_link_libraries(myfeature PRIVATE gcov)
+
add_custom_target(coverage
COMMAND
${GCOVR_EXECUTABLE}
- --root=${PROJECT_SOURCE_DIR}/include/
- --object-directory=${CMAKE_CURRENT_BINARY_DIR}
+ --root=${PROJECT_SOURCE_DIR}/
+ --filter=${PROJECT_SOURCE_DIR}/include
+ --filter=${PROJECT_SOURCE_DIR}/src
+ --object-directory=${PROJECT_BINARY_DIR}
DEPENDS
check
)Gallwch ychwanegu mwy o lyfrgelloedd, ffeiliau gweithredadwy, ac yn y blaen. Nid yw sut yn union maen nhw wedi'u cysylltu o fewn y prosiect yn bwysig. Yr hyn sy'n bwysig yw pa dargedau yw rhyngwyneb ein modiwl, sy'n golygu eu bod nhw wedi'u hamlygu.
Nawr mae gennym ni fodiwlau-blociau safonol, a gallwn ni eu dominyddu: gallwn ni gyfansoddi strwythur o unrhyw gymhlethdod ohonyn nhw, gan eu gosod yn y system neu eu cysylltu â'i gilydd o fewn un system ymgynnull.
Gosod yn y system
Un o'r opsiynau ar gyfer defnyddio'r modiwl yw gosod ein modiwl yn y system.
cmake --build путь/к/сборочной/директории --target installAr ôl hynny, mae wedi'i gysylltu ag unrhyw brosiect arall gan ddefnyddio'r gorchymyn .
find_package(Mylib 1.0 REQUIRED)Cysylltiad fel is-fodiwl
Dewis arall yw cysylltu'r ffolder gyda'n prosiect â phrosiect arall fel is-fodiwl gan ddefnyddio'r gorchymyn .
Defnyddio
Mae'r dulliau cysylltu'n amrywio, ond mae'r canlyniad yr un peth. Yn y ddau achos, bydd y targedau ar gael yn y prosiect gan ddefnyddio ein modiwl. Mylib::myfeature и Mylib::mylib, y gellir ei ddefnyddio, er enghraifft, fel hyn:
add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)Yn benodol yn ein hachos ni, y llyfrgell Mylib::myfeature Mae angen ei gysylltu pan fo angen cysylltu â'r llyfrgell libmyfeatureOs oes digon o benawdau, yna mae'n werth defnyddio llyfrgell. Mylib::mylib.
Gall targedau CMake fod yn anodd, er enghraifft, wedi'u cynllunio i basio rhai priodweddau, dibyniaethau, ac ati yn unig. Fodd bynnag, cânt eu trin i gyd mewn modd unffurf.
Sef yr hyn yr oedd disgwyl iddo gael ei gyflawni.
Ffynhonnell: hab.com
