C++ me CMake - teina ake ake, wahanga II

C++ me CMake - teina ake ake, wahanga II

I te wahanga o mua Ko tenei korero whakangahau i korero mo te whakarite whare pukapuka pane i roto i te kaihanga punaha hanga CMake.

I tenei wa ka taapirihia e matou he whare pukapuka kua whakahiato ki a ia, me te korero ano mo te hono i nga waahanga ki a raatau.

Ka rite ki o mua, ka taea tonu e te hunga e manawanui ana haere ki te rehitatanga kua whakahoutia ka pa ki nga mea katoa ki o ringaringa.


Tuhinga

  1. Wehea
  2. Te wikitoria

Wehea

Ko te mea tuatahi me mahi ki te whakatutuki i ta maatau whainga teitei ko te wehewehe i te rorohiko e whakawhanakehia ana e matou ki nga poraka mo te ao, mokemoke e rite ana ki te tirohanga a te kaiwhakamahi.

I te wahanga tuatahi, i whakaahuatia taua poraka paerewa - he kaupapa me te whare pukapuka pane. Inaianei me taapiri he whare pukapuka kua whakahiato ki ta maatau kaupapa.

Ki te mahi i tenei, me tango e tatou te whakatinanatanga o te mahi myfunc i roto i te wehe .cpp-kōnae:

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

Katahi ka tautuhia te whare pukapuka hei whakahiato (myfeature), ka uru ki nga mea i riro mai i te taahiraa o mua .cpp-kōnae. Ko te whare pukapuka hou e tino hiahia ana ki nga upoko o naianei, a, hei whakarato i tenei, ka taea me te hono ki te kaupapa o naianei. mylib. I tua atu, ko te hononga i waenganui i a raatau he iwi whanui, ko te tikanga ko nga mea katoa ka hono atu te whaainga myfeature, ka whiwhi aunoa i te kawenga me te whaainga mylib (atu e pā ana ki ngā tikanga pūtahi).

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

I muri mai, ka whakarite maatau kua whakauruhia te whare pukapuka hou ki runga i te punaha:

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

Me tohu mo te kaupapa myfeature, mo mylib i hangaia he ingoa ingoa me te prefix Mylib::. He rite ano te tuhi mo nga kaupapa e rua i te kaweake mo te whakaurunga ki te punaha. Ma tenei ka taea te mahi riterite me nga whaainga mo tetahi kaupapa here.

Whai muri i tenei, ko te toenga ko te hono i nga whakamatautau wae me te whare pukapuka hou (mahi myfunc tangohia mai i te taitara, na me hono koe inaianei):

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
 )

Pane (Mylib::mylib) i tenei wa kaore koe e hiahia ki te hono wehe, na te mea, kua whakahuahia ake nei, ka hono aunoa me te whare pukapuka (Mylib::myfeature).

A kia taapirihia etahi ahuatanga hei whakarite i nga inenga kapi ma te whai whakaaro ki te whare pukapuka hou kua tae 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
     )

Ka taea e koe te taapiri atu i etahi atu whare pukapuka, nga mahi whakahaere, aha atu. Kare he aha te ahua o te hononga ki a raua i roto i te kaupapa. Ko te mea nui ko ehea nga whaainga ko te atanga o ta tatou waahanga, ara, ka mau tonu.

Te wikitoria

Inaianei kei a matou nga waahanga poraka paerewa, a ka taea e matou te whakahaere i a raatau: titohia ki roto i te hanganga o nga mea uaua, te whakauru ki roto i te punaha, te hono ranei i roto i te punaha huihuinga kotahi.

Te whakaurunga ki te punaha

Ko tetahi o nga whiringa mo te whakamahi i te waahanga ko te whakauru i ta maatau waahanga ki roto i te punaha.

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

I muri i tera, ka hono ki tetahi atu kaupapa ma te whakamahi i te whakahau find_package.

find_package(Mylib 1.0 REQUIRED)

Hononga hei kōwaeroto

Ko tetahi atu whiringa ko te hono i te kōpaki me to maatau kaupapa ki tetahi atu kaupapa hei waahanga iti ma te whakamahi i te whakahau add_subdirectory.

Whakamahia

He rereke nga tikanga here, engari he rite tonu te hua. I roto i nga take e rua, ka watea nga whainga i roto i te kaupapa ma te whakamahi i ta maatau waahanga Mylib::myfeature и Mylib::mylib, ka taea te whakamahi, hei tauira, penei:

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

I roto i ta maatau take, ko te whare pukapuka Mylib::myfeature me hono i te wa e tika ana ki te hono ki te whare pukapuka libmyfeature. Mena he nui nga pane, he pai te whakamahi i te whare pukapuka Mylib::mylib.

Ka taea e nga whaainga CMake te tinihanga, hei tauira, ko te tuku noa i etahi taonga, whakawhirinaki, aha atu. I te wa ano, ko te mahi tahi me ratou ka rite tonu.

Koira te mea i tika kia whiwhi.

Source: will.com

Tāpiri i te kōrero