C ++ na CMake - ụmụnna ruo mgbe ebighị ebi, akụkụ II

C ++ na CMake - ụmụnna ruo mgbe ebighị ebi, akụkụ II

Na akụkụ gara aga Akụkọ a na-atọ ụtọ kwuru gbasara ịhazi ọbá akwụkwọ nkụnye eji isi mee n'ime igwe nrụpụta sistemụ nrụpụta CMake.

Oge a, anyị ga-agbakwunye ọbá akwụkwọ achịkọtara na ya, ma na-ekwukwa maka ijikọ modul na ibe ya.

Dị ka ọ dị na mbụ, ndị na-enweghị ndidi nwere ike ozugbo gaa na ebe nchekwa emelitere ma were aka nke aka gị metụ ihe niile aka.


Ihe

  1. Kewaa
  2. merie

Kewaa

Ihe mbụ anyị kwesịrị ime iji nweta ebumnobi anyị dị elu bụ ikesa ngwa ngwa anyị mepụtara ka ọ bụrụ ihe mgbochi zuru ụwa ọnụ, nke dịpụrụ adịpụ nke edobere n'anya onye ọrụ.

N'akụkụ nke mbụ, a kọwara ngọngọ ọkọlọtọ dị otú ahụ - oru ngo nwere ọbá akwụkwọ nkụnye eji isi mee. Ugbu a, ka anyị tinye ọbá akwụkwọ achịkọtara na ọrụ anyị.

Iji mee nke a, ka anyị wepụta mmejuputa ọrụ ahụ myfunc na iche .cpp- faịlụ:

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

Mgbe ahụ anyị kọwapụtara ọbá akwụkwọ a ga-achịkọta (myfeature), nke ga-agụnye ihe e nwetara na nzọụkwụ gara aga .cpp- faịlụ. Ọbá akwụkwọ ọhụrụ ahụ doro anya na-achọ ndị nkụnye eji isi mee, na iji nye nke a, ọ nwere ike ma kwesịkwa ejikọta ya na ebumnuche dị adị. mylib. Ọzọkwa, njikọ dị n'etiti ha bụ ọha na eze, nke pụtara na ihe niile a ga-ejikọta ya myfeature, ga-enweta ibu na ebumnobi na-akpaghị aka mylib (ọzọ banyere ụzọ knitting).

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

Ọzọ, anyị ga-agba mbọ hụ na etinyekwara ọbá akwụkwọ ọhụrụ ahụ na sistemụ:

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

Ekwesiri iburu n'uche na maka ebumnuche myfeature, maka mylib emepụtara utu aha nwere prefix Mylib::. Edere otu ihe ahụ maka ebumnuche abụọ ahụ mgbe ị na-ebupụ ha maka ntinye na sistemụ. Nke a na-eme ka o kwe omume ịrụ ọrụ n'otu n'otu na ihe mgbaru ọsọ maka nke ọ bụla atụmatụ njikọ.

Mgbe nke a gasịrị, naanị ihe fọdụrụ bụ ijikọ ule otu na ọba akwụkwọ ọhụrụ (ọrụ myfunc ewepụrụ na aha ahụ, yabụ ugbu a ịkwesịrị ijikọ):

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
 )

Isi okwu (Mylib::mylib) ugbu a, ọ dịghị mkpa ka ị jikọọ iche iche, n'ihi na, dị ka e kwuru na mbụ, ha na-akpaghị aka jikọọ na ụlọ akwụkwọ (ọbá akwụkwọ).Mylib::myfeature).

Ka anyị tinyekwa nuances ole na ole iji hụ na nha mkpuchi na-eburu n'uche n'ọbá akwụkwọ ahụ bịarutere ọhụrụ:

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

Ị nwere ike itinyekwu ọba akwụkwọ, ndị executable, wdg. Ọ baghị uru ka esi ejikọta ha na ibe ha n'ime ọrụ ahụ. Naanị ihe dị mkpa bụ ebumnuche bụ interface nke modul anyị, ya bụ, ha na-apụ apụ.

merie

Ugbu a, anyị nwere modul ngọngọ ọkọlọtọ, anyị nwere ike ịchịkwa ha: depụta ha n'ime usoro nke mgbagwoju anya ọ bụla, tinye ha n'ime usoro ma ọ bụ jikọta ha ọnụ n'ime otu usoro mgbakọ.

Nwụnye n'ime usoro

Otu nhọrọ maka iji modul bụ ịwụnye modul anyị n'ime usoro.

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

Mgbe nke ahụ gasịrị, a na-ejikọta ya na ọrụ ọ bụla ọzọ site na iji iwu ahụ find_package.

find_package(Mylib 1.0 REQUIRED)

Njikọ dị ka submodule

Nhọrọ ọzọ bụ ijikọ folda na ọrụ anyị na ọrụ ọzọ dị ka submodule site na iji iwu ahụ add_subdirectory.

Jiri

Ụzọ ejikọ dị iche iche, mana nsonaazụ ya bụ otu. N'okwu abụọ ahụ, ihe mgbaru ọsọ ga-adị na ọrụ ahụ site na iji modul anyị Mylib::myfeature и Mylib::mylib, nke enwere ike iji, dịka ọmụmaatụ, dịka nke a:

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

Kpọmkwem n'ọnọdụ anyị, ọbá akwụkwọ Mylib::myfeature kwesịrị ijikọ mgbe ọ dị mkpa ijikọ na ụlọ akwụkwọ libmyfeature. Ọ bụrụ na enwere nkụnye eji isi mee, mgbe ahụ ọ bara uru iji ụlọ akwụkwọ ahụ Mylib::mylib.

Ebumnuche CMake nwere ike ịghọ aghụghọ, dịka ọmụmaatụ, ezubere naanị ibuga ụfọdụ akụrụngwa, ndabere, wdg. N'otu oge ahụ, ịrụ ọrụ na ha na-eme n'otu ụzọ ahụ.

Nke ahụ bụ ihe anyị kwesịrị inweta.

isi: www.habr.com

Tinye a comment