C++ ma CMake - uso e faavavau, vaega II

C++ ma CMake - uso e faavavau, vaega II

I le vaega muamua O lenei tala malie na talanoa e uiga i le faʻatulagaina o se faletusi ulutala i totonu o le CMake build system generator.

O le taimi lenei o le a matou faʻaopoopoina se faletusi tuʻufaʻatasia i ai, ma talanoa foi e uiga i le fesoʻotaʻi o modules i le tasi ma le isi.

E pei o le taimi muamua, o i latou e le onosai e mafai ona vave alu i le fale teu oloa fou ma tago atu i mea uma i ou lava lima.


Mataupu

  1. Vaevae
  2. Manumalo

Vaevae

O le mea muamua e tatau ona tatou faia e ausia ai la tatou sini maualuga o le vaevae lea o le polokalama tatou te atiina ae i le lautele, poloka vavae ese e tutusa mai le vaaiga a le tagata faʻaoga.

I le vaega muamua, o sea poloka masani na faʻamatalaina - o se galuega faʻatasi ma se faletusi ulutala. Se'i o tatou fa'aopoopo se faletusi tu'ufa'atasi i la tatou galuega.

Ina ia faia lenei mea, seʻi o tatou ave ese le faʻatinoga o le galuega myfunc i se tulaga ese .cpp-faila:

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

Ona matou faʻamalamalamaina lea o le faletusi e tuʻufaʻatasia (myfeature), lea o le a aofia ai mea na maua i le laasaga muamua .cpp- faila. O le faletusi fou e manino lava e manaʻomia ai ulutala o loʻo i ai, ma ina ia mafai ona tuʻuina atu lenei mea, e mafai ma e tatau ona noatia i le faʻamoemoe o loʻo i ai. mylib. E le gata i lea, o le fesoʻotaʻiga i le va oi latou e faʻasalalau, o lona uiga o mea uma e fesoʻotaʻi i ai le faʻamoemoe myfeature, o le a otometi lava ona maua le uta ma le sini mylib (sili atu e uiga i metotia lalaga).

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

Le isi, matou te mautinoa o loʻo faʻapipiʻi foi le faletusi fou i luga o le polokalama:

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

E tatau ona maitauina mo le faʻamoemoe myfeature, ae mo mylib na faia ai se igoa e iai se prefix Mylib::. O le mea lava lea e tasi e tusia mo faʻamoemoega e lua pe a auina atu i fafo mo le faʻapipiʻiina i luga o le faiga. Ole mea lea e mafai ai ona galue tutusa ma sini mo soʻo se mea faiga fa'amau.

A maeʻa lenei mea, pau lava le mea o loʻo totoe o le faʻafesoʻotaʻi o suʻega iunite ma le faletusi fou (function myfunc aveese mai le ulutala, o lea e tatau ona e faʻafesoʻotaʻi):

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
 )

Ulutala (Mylib::mylib) i le taimi nei e te le manaʻomia le faʻafesoʻotaʻi ese, aua, e pei ona taʻua muamua, e otometi lava ona fesoʻotaʻi ma le faletusi (Mylib::myfeature).

Ma seʻi o tatou faʻaopoopoina ni faʻamatalaga se lua e faʻamautinoa ai fua faʻatatau e faʻatatau i le faletusi faatoa taunuu mai:

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

E mafai ona e fa'aopoopo nisi faletusi, executables, etc. E le afaina pe o le a tonu le fesoʻotaʻiga o le tasi i le isi i totonu o le poloketi. Pau lava le mea taua o faʻamoemoega o le atinaʻe o la tatou module, o lona uiga, latou te pipii i fafo.

Manumalo

O lea ua i ai a matou poloka poloka masani, ma e mafai ona tatou puleaina i latou: faʻapipiʻi i totonu o se fausaga o soʻo se lavelave, faʻapipiʻi i totonu o se faiga poʻo le fesoʻotaʻi faʻatasi i totonu o se faʻapotopotoga e tasi.

Fa'apipi'i i totonu o le faiga

O se tasi o filifiliga mo le faʻaogaina o le module o le faʻapipiʻiina lea o la matou module i totonu o le polokalama.

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

A maeʻa lena, e fesoʻotaʻi i soʻo se isi lava poloketi e faʻaaoga ai le poloaiga find_package.

find_package(Mylib 1.0 REQUIRED)

So'oga o se submodule

O le isi filifiliga o le faʻafesoʻotaʻi lea o le faila ma la matou poloketi i se isi poloketi o se submodule e faʻaaoga ai le poloaiga add_subdirectory.

Faaaoga

E eseese auala e fusifusia ai, ae o le taunuuga e tutusa. I tulaga uma e lua, o le a maua sini i le poloketi e faʻaaoga ai la tatou module Mylib::myfeature и Mylib::mylib, lea e mafai ona faʻaaogaina, mo se faʻataʻitaʻiga, pei o lenei:

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

Aemaise lava i la matou tulaga, o le faletusi Mylib::myfeature e mana'omia ona feso'ota'i pe a mana'omia ona feso'ota'i ma le faletusi libmyfeature. Afai e lava ulutala, e aoga le faʻaaogaina o le faletusi Mylib::mylib.

O sini CMake e mafai ona taufaasese, mo se faʻataʻitaʻiga, naʻo le faʻamoemoe e tuʻuina atu nisi o meatotino, faʻalagolago, ma isi. I le taimi lava e tasi, o le galulue faatasi ma i latou e tupu i le auala lava e tasi.

O le mea lena na matou manaʻomia e maua.

puna: www.habr.com

Faaopoopo i ai se faamatalaga