C++ le CMake - barab'eso ka ho sa feleng, karolo ea II

C++ le CMake - barab'eso ka ho sa feleng, karolo ea II

Karolong e fetileng Pale ena e monate e buile ka ho hlophisa laeborari ea lihlooho ka har'a jenereithara ea sistimi ea CMake.

Lekhetlong lena re tla eketsa laeborari e hlophisitsoeng ho eona, hape re bue ka ho hokahanya li-module le tse ling.

Joaloka pele, ba sa fele pelo ba ka khona hang-hang e-ea sebakeng sa polokelo e ntlafalitsoeng mme o ame ntho e nngwe le e nngwe ka matsoho a hao.


Tse ka hare

  1. Arola
  2. Hlōla

Arola

Ntho ea pele eo re lokelang ho e etsa ho fihlela sepheo sa rona se phahameng ke ho arola software eo re e hlahisang ho ba li-block tsa bokahohleng, tse ka thōko tse tšoanang ho ea ka pono ea mosebedisi.

Karolong ea pele, thibelo e joalo e tloaelehileng e hlalositsoe - morero o nang le laebrari ea lihlooho. Joale ha re kenyeng laebrari e hlophisitsoeng morerong oa rona.

Ho etsa sena, a re ke re phethe ts'ebetsong ea ts'ebetso myfunc ka thoko .cpp-faele:

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;
+    }
+}

Ebe re hlalosa laeborari e lokelang ho hlophisoa (myfeature), e tla ba le se fumanoeng mohatong o fetileng .cpp-faele. Ho hlakile hore laeborari e ncha e hloka lihlooho tse teng, 'me e le ho fana ka sena, e ka hokahanngoa le morero o teng. mylib. Ho feta moo, kamano pakeng tsa bona ke ea sechaba, e bolelang hore ntho e 'ngoe le e' ngoe eo sepheo sa eona e tla kopanngoa myfeature, e tla amohela mojaro le sepheo ka bo eona mylib (ho feta ka mekhoa ea ho loha).

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)
+

E latelang, re tla etsa bonnete ba hore laeborari e ncha le eona e kentsoe sistimi:

@@ -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)

Ho lokela ho hlokomeloa hore ka morero myfeature, ha e le mylib lebitsotso le nang le sehlongoapele Mylib::. E tšoanang e ngotsoe bakeng sa merero ka bobeli ha u li romela ka ntle bakeng sa ho kenya tsamaiso. Sena se etsa hore ho khonehe ho sebetsa ka mokhoa o ts'oanang le lipakane bakeng sa leha e le efe leano le tlamang.

Kamora sena, se setseng ke ho hokahanya liteko tsa yuniti le laeborari e ncha (function myfunc e ntšitsoe sehloohong, joale o hloka ho hokahanya):

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
 )

Lihlooho (Mylib::mylib) joale ha ho hlokahale hore u hokahane ka thoko, hobane, joalo ka ha ho se ho boletsoe, li hokahantsoe ka bohona le laeborari (Mylib::myfeature).

'Me ha re kenyelleng lintlha tse' maloa ho netefatsa hore litekanyo tsa tšireletso li ela hloko laeborari e sa tsoa fihla:

@@ -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
     )

O ka eketsa lilaebrari tse ling, li-executable, joalo-joalo. Ha ho na taba hore na hantle-ntle li hokahane joang ka hare ho morero. Ntho ea bohlokoa feela ke hore na li- targets ke li-interface tsa mojule oa rona, ke hore, li ts'oara.

Hlōla

Hona joale re na le li-modules tse tloaelehileng tsa li-block, 'me re ka li laola: li hlophisitse ka sebopeho sa ntho leha e le efe e rarahaneng, re li kenya ka har'a tsamaiso kapa re li kopanya hammoho ka har'a tsamaiso e le' ngoe ea kopano.

Ho kenya tsamaiso

E 'ngoe ea likhetho tsa ho sebelisa module ke ho kenya module ea rona ho sistimi.

cmake --build путь/к/сборочной/директории --target install

Ka mor'a moo, e hokahane le morero ofe kapa ofe o sebelisa taelo find_package.

find_package(Mylib 1.0 REQUIRED)

Khokahano joalo ka submodule

Kgetho e 'ngoe ke ho hokahanya foldara le projeke ea rona ho projeke e' ngoe e le submodule e sebelisang taelo add_subdirectory.

Sebelisa

Mekhoa ea ho tlama e fapane, empa phello e tšoana. Maemong ana ka bobeli, lipheo li tla fumaneha morerong ho sebelisa mojule oa rona Mylib::myfeature и Mylib::mylib, e ka sebelisoang, mohlala, joalo ka:

add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)

Haholo-holo molemong oa rona, laeborari Mylib::myfeature e hloka ho hokahana ha ho hlokahala ho hokahana le laeborari libmyfeature. Haeba ho na le lihlooho tse lekaneng, joale ho molemo ho sebelisa laebrari Mylib::mylib.

Lipheo tsa CMake li ka ba tse qhekellang, mohlala, tse reretsoeng feela ho fetisetsa thepa e itseng, litšepiso, joalo-joalo. Ka nako e ts'oanang, ho sebetsa le bona ho etsahala ka tsela e ts'oanang.

Ke seo re neng re hloka ho se fumana.

Source: www.habr.com

Eketsa ka tlhaloso