C ++ et CMake - fratres in perpetuum, pars II

C ++ et CMake - fratres in perpetuum, pars II

In priore parte Haec fabula delectabilis narratur de bibliotheca capitali ordinando intra CMake fabricandi systematis generantis.

Hoc tempore bibliothecam compilatam ei adiciamus, itemque de modulis inter se coniungendis.

Ut prius, illi qui impatientes sunt, statim possunt ad updated repositio et tange tuis manibus omnia.


contentus

  1. divide
  2. Vincere

divide

Primum opus est facere ut finem nostrum arduum assequendum sit, dividere programmata quae in universalia evehimus, impedimenta solitaria uniformia a parte utentis.

In prima parte, tale truncum signum descriptum est - delineatio cum bibliotheca capitali. Nunc addamus bibliothecam compilatam ad propositum.

Hoc facere, exsecutionem officii sumamus myfunc in separato .cpp-file:

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

Deinde definimus bibliothecam conficiendam.myfeatureq .cpp-file. Nova bibliotheca manifesto capita exsistentia requirit et ut hoc provideat, ad finem existentem ligari potest et debet mylib. Connexio autem inter eos publica est, quae significat omnia ad quae scopo coniungentur myfeature, Et onus statim accipere scopum mylib (de conexos modi).

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

Deinde operam dabimus etiam novam bibliothecam in systemate institui:

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

Notandum, quod ad myfeature, sicut enim mylib an alias cum praepositione creatus est Mylib::. Idem de utroque usu scriptum est, cum eas educendi ad institutionem in systemate. Inde possibilis est operari uniformiter cum proposita pro quolibet ligamen consilium.

Post haec, omne quod reliquum est, unitatis probationes cum nova bibliotheca coniunge (munus myfunc e titulo sumpta, nunc ligare debes);

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
 )

Capitula (Mylib::mylib) nunc separatim coniungere non debes, quia, ut iam dixi, cum bibliotheca ipso conexi sunt (Mylib::myfeature).

Et adiungamus duo nuances ut mensuras coverage inspecta nuper adveniente bibliotheca:

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

Plura addere potes bibliothecas, executables, etc. Nihil refert quam exacte inter se connexae sint intra res. Restat ut scuta interfaces moduli nostri, hoc est, exertant.

Vincere

Nunc regulam regulae moduli habemus, eos dominari possumus: eos in alicuius complexionis structuram compone, eos in systema inserendi vel in unum systematis conventum coniungendi.

Installation in systema

Una optionum moduli utendi est, moduli nostri in systema instituendi.

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

Deinde coniungitur cuilibet alteri utenti mandato find_package.

find_package(Mylib 1.0 REQUIRED)

Connection as a submodule

Alia optio est folder cum nostro incepto coniungere alteri inceptum sicut submodule utens praecepto add_subdirectory.

usum

Modi ligandi diversi sunt, sed effectus idem est. Utrisque in casibus praesto erunt proposita in programmate nostro moduli utentes Mylib::myfeature и Mylib::mylibqui adhiberi potest, verbi gratia, sic;

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

In casu nostro, bibliotheca Mylib::myfeature necesse est coniungi cum bibliotheca coniungi necesse est libmyfeature. Si satis capitis sunt, operae pretium est uti bibliotheca Mylib::mylib.

CMake scuta captiosa esse possunt, exempli gratia, soli destinati ad aliquas possessiones, clientelas, etc. Eodem tempore cooperante eodem modo occurrit.

Id quod nobis opus est.

Source: www.habr.com

Add a comment