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

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

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž™แžพแž„แž€แŸ†แžŽแžแŸ‹แž”แžŽแŸ’แžŽแžถแž›แŸแž™แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž…แž„แž€แŸ’แžšแž„ (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)

แž‚แžฝแžšแž€แžแŸ‹แžŸแŸ†แž‚แžถแž›แŸ‹แžแžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸ„แž›แž”แŸ†แžŽแž„ 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 แžขแžถแž…แž‡แžถแž›แŸ’แž”แžทแž…แž€แž› แž‡แžถแžงแž‘แžถแž แžšแžŽแŸ แž˜แžถแž“แž”แŸ†แžŽแž„แž”แž‰แŸ’แž‡แžผแž“แžแŸ‚แž›แž€แŸ’แžแžŽแŸˆแžŸแž˜แŸ’แž”แžแŸ’แžแžทแž˜แžฝแž™แž…แŸ†แž“แžฝแž“ แž—แžถแž–แžขแžถแžŸแŸ’แžšแŸแž™แŸ”แž›แŸ” แž‘แž“แŸ’แž‘แžนแž˜แž“แžนแž„แž“แŸแŸ‡แž€แžถแžšแž’แŸ’แžœแžพแž€แžถแžšแž‡แžถแž˜แžฝแž™แž–แžฝแž€แž‚แŸแž€แžพแžแžกแžพแž„แžแžถแž˜แžšแž”แŸ€แž”แžŠแžผแž…แž‚แŸ’แž“แžถแŸ”

แž“แŸ„แŸ‡แž แžพแž™แž‡แžถแžขแŸ’แžœแžธแžŠแŸ‚แž›แž™แžพแž„แžแŸ’แžšแžผแžœแž€แžถแžšแžŠแžพแž˜แŸ’แž”แžธแž‘แž‘แžฝแž›แž”แžถแž“แŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž‘แžทแž‰แž€แžถแžšแž”แž„แŸ’แž แŸ„แŸ‡แžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS, แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS ๐Ÿ”ฅ แž‘แžทแž‰แžŸแŸแžœแžถแž”แž„แŸ’แž แŸ„แŸ‡แž‚แŸแž แž‘แŸ†แž–แŸแžšแžŠแŸ‚แž›แžขแžถแž…แž‘แžปแž€แž…แžทแžแŸ’แžแž”แžถแž“แž‡แžถแž˜แžฝแž™แž“แžนแž„แž€แžถแžšแž€แžถแžšแž–แžถแžš DDoS แž“แžทแž„แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ VPS VDS | ProHoster