C++ ΠΈ CMake β€” братя Π·Π° Π²ΠΈΠ½Π°Π³ΠΈ, част II

C++ ΠΈ CMake β€” братя Π·Π° Π²ΠΈΠ½Π°Π³ΠΈ, част II

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° част Π½Π° Ρ‚Π°Π·ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½Π° история сС Π³ΠΎΠ²ΠΎΡ€Π΅ΡˆΠ΅ Π·Π° организацията Π½Π° Π·Π°Π³Π»Π°Π²Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π° систСми Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ CMake.

Π’ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ към Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌ.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€Π΅Π΄ΠΈ, Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ нямат Ρ‚ΡŠΡ€ΠΏΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠ³Π°Ρ‚ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚ Π² актуализирания Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚ всичко с Ρ€ΡŠΡ†Π΅Ρ‚Π΅ си.


Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅

  1. РаздСляй
  2. Управлявай

РаздСляй

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ, Π·Π° Π΄Π° постигнСм Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΌΠ±ΠΈΡ†ΠΈΠΎΠ·Π½Π° Ρ†Π΅Π», Π΅ Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ разработвания софтуСр Π½Π° унивСрсални ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π΅Π΄ΠΈΠ½Π½ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° потрСбитСля.

Π’ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част бСшС описан Ρ‚Π°ΠΊΡŠΠ² стандартСн Π±Π»ΠΎΠΊ β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π·Π°Π³Π»Π°Π²Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘Π΅Π³Π° Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

Π—Π° Ρ†Π΅Π»Ρ‚Π° Ρ‰Π΅ изнСсСм рСализацията Π½Π° функцията myfunc Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ .cpp-Ρ„Π°ΠΉΠ»:

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

         ~  Π²ΠΈΠΆ 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 
+
+namespace mylib
+{
+    bool myfunc (mystruct)
+    {
+        return true;
+    }
+}

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (myfeature), която Ρ‰Π΅ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° .cpp-Ρ„Π°ΠΉΠ». Новата Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, изисква Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ заглавия, ΠΈ Π·Π° Π΄Π° сС осигури Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ ΠΈ трябва Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π°Ρ‚Π° Ρ†Π΅Π» mylib. ОсвСн Ρ‚ΠΎΠ²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ тях Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ, Π° Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всичко, към ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС ΡΠ²ΡŠΡ€Π·Π°Π½Π° Ρ†Π΅Π»Ρ‚Π°, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π² Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ Ρ†Π΅Π»Ρ‚Π° myfeature, ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ mylib (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) +).

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π½ΠΎΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡΡŠΡ‰ΠΎ Π΄Π° бъдС инсталирана Π² систСмата:

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

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

Врябва Π΄Π° ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π·Π° Ρ†Π΅Π»Ρ‚Π° myfeature, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° mylib бСшС създадСн псСвдоним с прСфикс Mylib::. Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ Π΅ написано ΠΈ Π·Π° Π΄Π²Π΅Ρ‚Π΅ Ρ†Π΅Π»ΠΈ ΠΏΡ€ΠΈ СкспортиранС Π·Π° инсталиранС Π² систСмата. Π’ΠΎΠ²Π° осигурява Π΅Π΄Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ†Π΅Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΈ всяка схСма Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° остава Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈΡ‚Π΅ тСстовС с Π½ΠΎΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (функцията myfunc бСшС изнСсСна ΠΎΡ‚ Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ сСга трябва Π΄Π° сС Π»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚):

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
 )

Заглавията (Mylib::mylib) сСга Π½Π΅ трябва Π΄Π° сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ спомСнахмС, Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° (Mylib::myfeature).

И Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ няколко нюанса, Π·Π° Π΄Π° осигурим измСрвания Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ с ΠΎΡ‚Ρ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°:

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

МоТС Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Ρ‚.Π½. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π°ΠΆΠ½ΠΎ Π΅ само ΠΊΠΎΠΈ Ρ†Π΅Π»ΠΈ прСдставляват интСрфСйса Π½Π° нашия ΠΌΠΎΠ΄ΡƒΠ», тоСст ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π° ΠΏΠΎΠ²ΡŠΡ€Ρ…Π½ΠΎΡΡ‚Ρ‚Π°.

Управлявай

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ стандартни ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ управлявамС: Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌΠ΅ структури с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° слоТност, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΠΉΠΊΠΈ Π³ΠΈ Π² систСмата ΠΈΠ»ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°ΠΉΠΊΠΈ Π³ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½Π½Π° систСма Π·Π° сборка.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ Π² систСмата

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π΅ Π΄Π° инсталирамС нашия ΠΌΠΎΠ΄ΡƒΠ» Π² систСмата.

cmake --build ΠΏΡŠΡ‚/ΠΊ/сборочната/дирСктория --target install

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‚ΠΎΠΉ сС ΡΠ²ΡŠΡ€Π·Π²Π° Π² всСки Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° find_package.

find_package(Mylib 1.0 REQUIRED)

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»

Π”Ρ€ΡƒΠ³ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° с нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ към Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ» с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° add_subdirectory.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰. И Π² Π΄Π²Π°Ρ‚Π° случая, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° нашия ΠΌΠΎΠ΄ΡƒΠ», Ρ†Π΅Π»ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ. Mylib::myfeature ΠΈ Mylib::mylib, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² нашия случай, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Mylib::myfeature трябва Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π° Ρ‚ΠΎΠ³Π°Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π»ΠΈΠ½ΠΊΠ½Π΅ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libmyfeature. Ако са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ само заглавията, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π°Π²Π° Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Mylib::mylib.

CMake Ρ†Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ…ΠΈΡ‚Ρ€ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ΠΈ само Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ свойства, зависимости ΠΈ Ρ‚.Π½. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° с тях сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π½Π°Ρ‡ΠΈΠ½.

ΠšΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster